错误:未定义的函数或变量 - MATLAB中的java

时间:2016-10-18 23:16:06

标签: java matlab javafx

我想用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 = MediaPlayertest = MediaPlayer();为了确保一切正常,我试图编译然后在MATLAB中运行一个简单的java Hello World,它工作正常。

可能是什么问题?如果你有时间,请通过编译上面链接中的代码来帮助我(2个文件,按“第二个java文件的下一页”)并尝试在MATLAB中运行它。我非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

简答:

MediaPlayer在Java(FX)代码的包mediaplayer中定义:

package mediaplayer;

因此,正确的初始化将是:

test = mediaplayer.MediaPlayer();

答案很长:

从这一点开始,这个问题就变成了JavaFX特有的,而不是关于简单的Matlab - Java互操作性。

问题:

  • JavaFX默认捆绑在Java8中,甚至Matlab R2016也随Java7一起提供,因此JavaFX包(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应用程序。