我无法使用JavaFX MediaPlayer获取Java应用程序来读取嵌入在runnable .jar输出文件中的.mp3文件。
我尝试过Google的每一个解决方案,例如toURL
,toURI
。当我在Eclipse JVM中运行程序时,有些解决方案有效(音乐被读取和播放)但当代码和音乐被打包成可运行的.jar 时,所有这些解决方案都失败了。
我要阅读的.mp3文件位于:
在Eclipse中:Java Project
- > src
- > img
- > music.mp3
在文件资源管理器中:C:\Users\Me\Desktop\Java Project\src\img\music.mp3
。
以下代码在Eclipse JVM中有效但在执行时失败 .jar。
media_player = new MediaPlayer(new Media(
Game.class.getClassLoader().getResource("img/music.mp3").toString()));
System.out.println()
在Eclipse控制台中给了我以下字符串:
file:/C:/Users/Me/Desktop/Java%20Project/bin/img/music.mp3
由于我需要分发runnable .jar,我不想将.mp3文件与.jar分开,因为它可能会给用户带来不便。
请告诉我JavaFX Media或MediaPlayer是否应该处理这种情况。
修改
阅读评论后,在导出runnable .jar时,我似乎不得不选择Extract required libraries into generated JAR
而不是Package required libraries into generated JAR
。
然而,这又引发了另一个问题。我正在使用的Java混淆器ProGuard无法处理库并提示我duplicate definition of library class
错误。我被迫选择了第三个选项,Copy required libraries into a sub-folder next to the generated JAR
允许播放音乐,但导致所有外部库与.jar分离。
是否有另一种让混淆器工作的方法,将外部库嵌入到.jar中以及要播放的音乐?
答案 0 :(得分:0)
创建可执行jar文件时,还会在jar文件所在的同一驱动器中创建库文件。但需要注意的重要一点是,您必须在物理上放置媒体文件,例如说目录中的song.mp3和jar文件将执行....!