处理独立程序的静默执行错误
silent execution bug with processing standalone program
我一直在尝试使用处理(3.0.2)作为显示视频的库。你可以在下面看到我的主要 class 的开头。我正在使用 Maven 在命令行上构建一个 运行 的胖 .jar。程序 运行s,不卡顿,可以关闭,但是没有视频...(下面的截图)问题是完全无声地发生:没有警告,没有崩溃。
我完全确定程序找到了视频文件,因为删除它会触发 RuntimeException
。
编辑: 好的,找到了文件,但没有找到框架。程序在尝试查找非零帧时卡住。
编辑 2: 看来这实际上是一个 GStreamer 问题。显然,Processing 不支持 GStreamer 1.x 沿袭。按照说明安装 GStreamer 0.1x here and here,不幸的是对我不起作用。
编辑 3: 尝试使用一个基本示例(下面的代码),我发现 Movie.read()
方法从未被触发,尽管 draw()
方法是。由于仍然没有错误或警告,我猜这是一个库问题。 有趣的是,当从 Processing IDE 作为 .pde 执行时,这段完全相同的代码工作得很好,所以那里一定有我缺少的库。有什么想法吗??
我的依赖项:
- core.jar
- video.jar
- jna.jar
- gstreamer-java.jar
系统:Ubuntu 14.04 LTS,Java HotSpot(TM) 64 位服务器 VM(java 版本“1.8.0_77”),Processing 3.0。 2通过处理安装视频库IDE.
import processing.core.PApplet;
import processing.video.*;
public class TestMovie extends PApplet{
Movie myMovie;
public static void main(String[] args){
PApplet.main(TestMovie.class.getName());
}
public void settings(){
size(720, 480, FX2D);
}
public void setup() {
//background(0);
try{
myMovie = new Movie(this, "red_45deg_284sec_500ml.mpg");
}catch(Exception e){
System.out.println(e.getMessage());
}
myMovie.loop();
}
public void draw() {
image(myMovie.get(), 0, 0);
System.out.println("I'm drawing!");
}
// Called every time a new frame is available to read
void movieEvent(Movie m) {
try{
m.read();
}catch(Exception e){
System.out.println(e.getMessage());
}
System.out.println("new frame!");
}
}
所以,我终于可以播放电影了,毕竟它似乎不是库问题......出于某种神秘原因,movieEvent()
没有执行,很可能是因为没有触发事件.使用 Movie.available()
解决如下:
public class TestMovie extends PApplet{
Movie myMovie;
public static void main(String[] args){
PApplet.main(TestMovie.class.getName());
}
public void settings(){
size(720, 480, FX2D);
}
public void setup() {
//background(0);
try{
myMovie = new Movie(this, "red_45deg_284sec_500ml.mpg");
}catch(Exception e){
System.out.println(e.getMessage());
}
myMovie.loop();
}
public void draw() {
if (myMovie.available()) {
myMovie.read();
}
image(myMovie, 0, 0);
}
}
我一直在尝试使用处理(3.0.2)作为显示视频的库。你可以在下面看到我的主要 class 的开头。我正在使用 Maven 在命令行上构建一个 运行 的胖 .jar。程序 运行s,不卡顿,可以关闭,但是没有视频...(下面的截图)问题是完全无声地发生:没有警告,没有崩溃。
我完全确定程序找到了视频文件,因为删除它会触发 RuntimeException
。
编辑: 好的,找到了文件,但没有找到框架。程序在尝试查找非零帧时卡住。
编辑 2: 看来这实际上是一个 GStreamer 问题。显然,Processing 不支持 GStreamer 1.x 沿袭。按照说明安装 GStreamer 0.1x here and here,不幸的是对我不起作用。
编辑 3: 尝试使用一个基本示例(下面的代码),我发现 Movie.read()
方法从未被触发,尽管 draw()
方法是。由于仍然没有错误或警告,我猜这是一个库问题。 有趣的是,当从 Processing IDE 作为 .pde 执行时,这段完全相同的代码工作得很好,所以那里一定有我缺少的库。有什么想法吗??
我的依赖项:
- core.jar
- video.jar
- jna.jar
- gstreamer-java.jar
系统:Ubuntu 14.04 LTS,Java HotSpot(TM) 64 位服务器 VM(java 版本“1.8.0_77”),Processing 3.0。 2通过处理安装视频库IDE.
import processing.core.PApplet;
import processing.video.*;
public class TestMovie extends PApplet{
Movie myMovie;
public static void main(String[] args){
PApplet.main(TestMovie.class.getName());
}
public void settings(){
size(720, 480, FX2D);
}
public void setup() {
//background(0);
try{
myMovie = new Movie(this, "red_45deg_284sec_500ml.mpg");
}catch(Exception e){
System.out.println(e.getMessage());
}
myMovie.loop();
}
public void draw() {
image(myMovie.get(), 0, 0);
System.out.println("I'm drawing!");
}
// Called every time a new frame is available to read
void movieEvent(Movie m) {
try{
m.read();
}catch(Exception e){
System.out.println(e.getMessage());
}
System.out.println("new frame!");
}
}
所以,我终于可以播放电影了,毕竟它似乎不是库问题......出于某种神秘原因,movieEvent()
没有执行,很可能是因为没有触发事件.使用 Movie.available()
解决如下:
public class TestMovie extends PApplet{
Movie myMovie;
public static void main(String[] args){
PApplet.main(TestMovie.class.getName());
}
public void settings(){
size(720, 480, FX2D);
}
public void setup() {
//background(0);
try{
myMovie = new Movie(this, "red_45deg_284sec_500ml.mpg");
}catch(Exception e){
System.out.println(e.getMessage());
}
myMovie.loop();
}
public void draw() {
if (myMovie.available()) {
myMovie.read();
}
image(myMovie, 0, 0);
}
}