gpt4 book ai didi

java - 错误: Undefined function or variable - java in MATLAB

转载 作者:行者123 更新时间:2023-12-01 09:21:55 26 4
gpt4 key购买 nike

我想从 MATLAB 运行一个用 Java 制作的简单媒体播放器,更准确地说是这个:https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/mediaplayerjava.htm

无论是尝试在 IntelliJ 中运行该代码,还是使用 javac 编译并运行 .class 文件时,该代码都可以顺利编译并正常工作。

它在与我的 MATLAB 使用的相同 Java 版本下成功编译,因此我用 javaaddpath(pwd) 告诉 java 文件的位置。由于某种原因,我在运行上面链接中提供的代码时收到错误“未定义的函数或变量'MediaPlayer',执行如下操作:test = MediaPlayertest = MediaPlayer(); 为了确保一切正常,我尝试编译然后在 MATLAB 中运行一个简单的 java Hello World,效果很好。

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

最佳答案

简短回答:

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

package mediaplayer;

因此,正确的初始化是:

test = mediaplayer.MediaPlayer();

长答案:

从这一点开始,这个问题变得真正针对 JavaFX,而不是关于琐碎的 Matlab - Java 互操作性。

问题:

  • JavaFX 默认捆绑在 Java8 中,甚至 Matlab R2016 也随 Java7 一起提供,因此 JavaFX 包 (javafx.*) 将不在 Matlab JVM 的类路径中,因此您必须确保 JavaFX 位于 JVM 的类路径上。
  • 一旦您设法启动应用程序(例如test = mediaplayer.MediaPlayer(); test.main({''});),它就会阻塞 Matlab 线程。更糟糕的是,当您关闭窗口时,Application 仍然不会退出,Matlab 线程仍处于阻塞状态。这可以通过调用 setImplicitExit(true) 来解决。在Applicationstart 方法中。当所有Stage关闭时,这将强制Application退出,因此Matlab线程不再被阻塞。
  • 此时的问题是应用程序无法启动多次。因此,如果您退出,您将永远无法再次启动同一个应用程序

要处理最后两点,您可以做的是在 Java 中实现一个“应用程序启动器”,该启动器在单独的线程上运行并可用于执行 JavaFX 应用程序。

关于java - 错误: Undefined function or variable - java in MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40119552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com