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

时间:2018-03-12 23:57:36

标签: java eclipse javafx javafx-2 executable-jar

我的项目在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中工作正常。

1 个答案:

答案 0 :(得分:1)

我不知道这是不是一个错误;它似乎是一个。

但是,播放短音的预期方法是使用AudioClip而不是MediaPlayer。这是一个重量轻得多的类,适用于非常短的声音文件。