所以我试图通过mp3spi库播放声音(mp3文件)。我应该补充一点,这个项目是在另一个程序中运行的(比如和附加组件),所以除了调试类之外它本身没有任何主类。当我从这个调试类运行项目时,一切正常,但是当从主程序内部运行它时(我应该添加该加载项作为jar和zip文件导出,zip文件将被加载到主程序)我得到一个javax.sound.sampled.UnsupportedAudioFileException。我认为这个问题与附加组件没有正确连接到库有关,但所有的mp3spi jar都包含在lib文件夹中。
我们正在使用maven来构建所有附加组件和主程序,所以我也尝试将类路径添加到清单文件中。 (在maven-jar-plugin中,就像许多其他堆栈溢出帖子中所建议的那样)不知何故它似乎适用于其他人,但不适合我。其他人也建议让jar运行,所以我添加了调试类作为主类,并再次尝试,这也没有用。
无论如何,我很遗憾,因为我没有想法尝试。任何帮助将非常感激!
以下是导致错误的代码:
String path = soundFileMap.get(soundId);
try {
inputStream = AudioSystem.getAudioInputStream(new File(path));
... (rest not shown)
以下是例外:
javax.sound.sampled.UnsupportedAudioFileException: format not supported
at javax.sound.sampled.AudioSystem.getAudioInputStreamImpl(AudioSystem.java:1023) ~[tritonus share-0.3.7-2.jar:?]
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1005) ~[tritonus-share-0.3.7-2.jar:?]
at jundl77.izou.izousound.outputplugin.SoundEngine.playSoundFile(SoundEngine.java:298) [classes/:?]
at jundl77.izou.izousound.outputplugin.SoundEngine.run(SoundEngine.java:382) [classes/:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_20]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_20]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_20]
这就是我的maven-jar-plugin的样子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifestEntries>
<Plugin-Id>${plugin.id}</Plugin-Id>
<Plugin-Class>${plugin.class}</Plugin-Class>
<Plugin-Version>${plugin.version}</Plugin-Version>
<Plugin-Provider>${plugin.provider}</Plugin-Provider>
<Plugin-Dependencies>${plugin.dependencies}</Plugin-Dependencies>
</manifestEntries>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<addClasspath>true</addClasspath>
<mainClass>jundl77.izou.izousound.Debug</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
无论如何,再一次,我们将非常感谢任何帮助。
答案 0 :(得分:0)
最好直接从URL或File创建AudioInputStream,而不是InputStream。鉴于资源是在Jar中打包的,您应该使用URL,因为无法从jar中读取文件。