我想用MATLAB运行一个简单的Java制作媒体播放器,更确切地说是这个:https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/mediaplayerjava.htm
此代码在没有任何问题的情况下编译,无论是在IntelliJ中运行它还是在使用javac
进行编译并运行.class文件时都可以运行。
它在我的MATLAB使用的相同Java版本下成功编译,所以我告诉java文件在哪里javaaddpath(pwd)
。出于某种原因,我在运行上面链接中提供的代码时收到错误“Undefined function or variable'MediaPlayer',这样做:test = MediaPlayer
或test = MediaPlayer();
为了确保一切正常,我试图编译然后在MATLAB中运行一个简单的java Hello World,它工作正常。
可能是什么问题?如果你有时间,请通过编译上面链接中的代码来帮助我(2个文件,按“第二个java文件的下一页”)并尝试在MATLAB中运行它。我非常感谢任何帮助!
答案 0 :(得分:1)
简答:
MediaPlayer
在Java(FX)代码的包mediaplayer
中定义:
package mediaplayer;
因此,正确的初始化将是:
test = mediaplayer.MediaPlayer();
答案很长:
从这一点开始,这个问题就变成了JavaFX特有的,而不是关于简单的Matlab - Java互操作性。
问题:
javafx.*
)不会出现在Matlab的JVM的类路径中,所以你必须确保JavaFX在JVM的类路径。Application
(例如test = mediaplayer.MediaPlayer(); test.main({''});
),它就会阻止Matlab线程。更糟糕的是,当您关闭窗口时,Application
仍然不会退出并且Matlab线程仍然被阻止。这可以通过在start
的{{1}}方法中调用setImplicitExit(true)
来解决。当所有Application
关闭时,这将强制Application
退出,因此Matlab线程不再被阻止。Stage
无法启动多次。因此,如果您已退出,则永远无法再次启动相同的Application
。你可以做的是处理最后两点是在Java中实现一个“应用程序启动器”,它运行在一个独立的线程上,可用于执行JavaFX应用程序。