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,适合非常短的声音文件。
我的项目在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,适合非常短的声音文件。