JavaFX 在 JAR 中找到媒体文件,但不会播放它?

JavaFX finds media file in JAR, but won't play it?

我的项目在Eclipse中播放音频文件很好,但是当我打包成JAR文件时,打包在JAR中的音频文件无法播放。

奇怪的是 JavaFX 似乎可以很好地找到文件。

我像这样实例化播放器:

    myClass.mediaPlayer = new MediaPlayer(new Media(
            myClass.getClass().getResource("/audio/file.wav").toString()));

我的调试字符串如下所示:

    System.out.println(mediaPlayer.getMedia().getDuration() + " "
                       mediaPlayer.getMedia().getSource())

在 Eclipse 中它工作正常并显示文件 URL:

358.049887 ms file:/home/username/path/to/project/bin/audio/file.wav 

当来自 JAR 的 运行 时,它显示 JAR URL:

358.049887 ms jar:file:/home/username/path/to/project.jar!/audio/file.wav

所以它一定是在定位文件,因为当 运行 来自 JAR 时它会正确报告持续时间,但它不会播放,也不会抛出任何异常。我还注意到玩家似乎永远无法达到 "READY" 状态。

我正在用我的 JAR 文件打包一个独立的 JRE,但我在 eclipse 和 JAR 打包 (1.8.0_92) 中使用相同版本的 Java。

我还注意到,我使用相同的 getClass().getResource() 方法来加载我与应用程序打包在一起的按钮图标,并且在 Eclipse 和 JAR 中工作正常。

我不知道这是不是一个错误;好像是一个

但是,播放短声音的预期方法是使用 AudioClip,而不是 MediaPlayer。这是一个非常lighter-weight class,适合非常短的声音文件。