Javafx 音乐播放器不工作

标签 java javafx

我正在用 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 组件,因此依赖于正在初始化的 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/

相关文章:

java - Eclipse 无法识别代码更改

Java ArrayList的合并函数复杂度

java - 避免开发人员糟糕的优化直觉

java - 使用持续时间为 1 毫秒且循环计数不定的时间线是否可以为秒表提供准确的时间?

java - 如何打印给定数字 n 的魔术矩阵最多 n 方

java - 有没有好的线程安全格式缓存库?

java - 无法在 Eclipse Kepler 中创建 JavaFX 项目

javafx - 如何在 WorldWind 中绘制具有高程表示的线

java - 在 JavaFX 中单击按钮即可将其删除

java - jfreechart-fx 1.0.1 图表是否可以与 fxgraphics2d 构建和呈现的图像进行交互?