我正在用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();
但是由于某种原因,我得到了这个错误:
https://pastebin.com/UPkTbWHh
music.mp3文件与我正在运行该文件的类位于同一文件夹中,并且代码在tick()方法中运行。有人对我该如何解决这个问题有想法吗?
谢谢,卢卡斯
最佳答案
您正在尝试从JavaFX应用程序的上下文外部执行上述代码。 MediaPlayer
是JavaFX组件,因此依赖于正在初始化的工具包,您(默认情况下)不能随意旋转JFX组件。
“正确”的方法是将JFX Application
子类化,然后从那里启动您的应用程序,这将正确地初始化JFX平台。
“黑客”方式是在Swing EDT中运行以下代码行:
new JFXPanel();
...这也会带来初始化JFX工具包的副作用,并允许您创建其他JFX组件。
正如评论中指出的那样,由于Java 9,您可以使用以下更简单的方法:
Platform.startup(() -> {
//Code to run on JFX thread
});