JavaFX Media如何在runnable .jar文件中读取.mp3文件?

时间:2015-08-06 09:16:46

标签: java eclipse jar javafx media-player

我无法使用JavaFX MediaPlayer获取Java应用程序来读取嵌入在runnable .jar输出文件中的.mp3文件。

我尝试过Google的每一个解决方案,例如toURLtoURI。当我在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中以及要播放的音乐?

1 个答案:

答案 0 :(得分:0)

创建可执行jar文件时,还会在jar文件所在的同一驱动器中创建库文件。但需要注意的重要一点是,您必须在物理上放置媒体文件,例如说目录中的song.mp3和jar文件将执行....!