【发布时间】:2014-04-20 19:39:29
【问题描述】:
我正在 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 文件: 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 文件: Jar 可以工作,但 mp3 不能播放。
错误消息:javax.sound.sampled.UnsupportedAudioFileException: 无法从输入 URL 获取音频输入流 在 javax.sound.sampled.AudioSystem.getAudioInputStream(未知来源) 在 audio.AudioPlayer.run(AudioPlayer.java:40)
我无法从 URL 获取 AudioInputStream?我不知道。所以让我们开始......
第三次和第四次尝试
尝试 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 文件: 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
【问题讨论】: