我正在Eclipse IDE中开发一个Java项目。我想将项目部署到jar文件中。让音频运行是我不同寻常的部分。我正在使用javazoom的mp3spi库来播放mp3文件。 (http://www.javazoom.net/mp3spi/sources.html)
我实现了我的AudioPlayer,就像javazoom网站上的示例一样。 (http://www.javazoom.net/mp3spi/documents.html)
我可以再次在这里发布冗长的代码,但是我的AudioPlayer扩展Thread以便它可以独立播放的差别几乎相同。 (它在开发环境中运行良好)
我遇到的问题是,当我将项目导出到jar中时,我无法运行它。我发现这个主题已经有很多问题和建议,我尝试了大部分内容。可悲的是,我仍然没有一个有效的解决方案。我确定它在那里但是在这一点上我可能会想念树林。
所有必需的库(jl1.0.1.jar,tritonus_share.jar和mp3spi1.9.5.jar)都在我的jar中并添加到类路径中。
代码的典型点似乎是AudioInputStream(在示例中的第10行),它创建了一个文件。
第一次尝试 - javazoom.net上建议的代码:
File file = new File("src/resources/audio/test.mp3");
AudioInputStream ain = AudioSystem.getAudioInputStream(file);
会发生什么:
Eclipse IDE: 工作正常,mp3播放。
导出的jar文件: Jar工作,但mp3不播放。
使用Windows控制台导出jar-File opend: Jar工作,但mp3不播放。
错误消息:在audio.AudioPlayer.run(AudioPlayer.java:40) java.io.FileNotFoundException:src \ resources \ audio \ test.mp3
所以我不能在jar中使用“File”,因为我不处理文件系统中的文件,而是处理jar中的文件。
第二次尝试
URL url = ClassLoader.getSystemResource("resources/audio/test.mp3");
AudioInputStream ain = AudioSystem.getAudioInputStream(url);
会发生什么:
Eclipse IDE: 工作正常,mp3播放。
导出的jar文件: Jar工作,但mp3不播放。
使用Windows控制台导出jar-File opend: Jar工作,但mp3不播放。
错误消息:javax.sound.sampled.UnsupportedAudioFileException: 无法从输入网址获取音频输入流 在javax.sound.sampled.AudioSystem.getAudioInputStream(未知来源) 在audio.AudioPlayer.run(AudioPlayer.java:40)
我无法从URL获取AudioInputStream?我不知道。所以,让我们来......
第3次和第4次尝试
尝试3:
BufferedInputStream myStream = new BufferedInputStream(getClass().getResourceAsStream("/resources/audio/test.mp3"));
AudioInputStream ain = AudioSystem.getAudioInputStream(myStream);
尝试4:
BufferedInputStream myStream = new BufferedInputStream(ClassLoader.getSystemResourceAsStream("resources/audio/test.mp3"));
AudioInputStream ain = AudioSystem.getAudioInputStream(myStream);
再次将结果在Eclipse IDE中播放,但不在jar中播放。
使用Windows控制台导出jar-File opend: Jar工作,但mp3不播放。
错误消息:javax.sound.sampled.UnsupportedAudioFileException: 无法从输入流中获取音频输入流 在javax.sound.sampled.AudioSystem.getAudioInputStream(未知来源) 在audio.AudioPlayer.run(AudioPlayer.java:40)
我真的迷失在这里。任何帮助将不胜感激。
相关主题:
File path or file location for Java - new file()
Reading File In JAR using Relative Path
Java Audio Stream (mp3spi lib), UnsupportedAudioFileException
答案 0 :(得分:0)
我以前总是将我的项目导出为jar,所有以类似方式加载的图像都会正确加载,而音频文件则不会。
现在,我尝试将我的项目导出为可运行的jar,它可以正常工作(尝试4,也许还有其他尝试)。以下问题和答案解释了jar和runnable jar之间的区别。
Java Eclipse: Difference between exporting as a JAR and exporting as a Runnable JAR
该清单文件如何通过
影响正确的资源加载ClassLoader.getSystemResourceAsStream
超出了我,但显然确实如此。
有人可能想详细说明那些maifest文件,因为我真的不能。或者也许在jar和可运行的jar的导出之间存在其他差异。
由于我有一个有效的解决方案,我现在已经完成了这个主题。