我正在用 Java 编写一个游戏,我决定向其中添加音乐。我尝试使用以下代码:
URL resource = getClass().getResource("music.mp3");
MediaPlayer a = new MediaPlayer(new Media(resource.toString()));
a.setOnEndOfMedia(new Runnable() {
public void run() {
a.seek(Duration.ZERO);
}
});
a.play();
但由于某种原因,我收到此错误:
文件music.mp3与我运行它的类位于同一文件夹中,并且代码在tick()方法中运行。有人知道我该如何解决这个问题吗?
谢谢,卢卡斯
最佳答案
您正尝试从 JavaFX 应用程序的上下文外部执行上述代码。 MediaPlayer
是一个 JavaFX 组件,因此依赖于正在初始化的 Toolkit,您不能(默认情况下)随意启动 JFX 组件。
“正确”的方法是子类化 JFX Application
,然后从那里启动您的应用程序,这将正确初始化 JFX 平台。
“黑客”方法是在 Swing EDT 中运行以下代码行:
new JFXPanel();
...这还会产生初始化 JFX 工具包的副作用,并允许您创建其他 JFX 组件。
正如评论中所指出的,从 Java 9 开始,您可以使用更少的 hacky 方法:
Platform.startup(() -> {
//Code to run on JFX thread
});
关于Javafx 音乐播放器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50135495/