AudioInputStream一旦导出为jar / zip就无法正常工作

时间:2015-01-11 08:01:29

标签: java maven audio export mp3

所以我试图通过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>

无论如何,再一次,我们将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

最好直接从URL或File创建AudioInputStream,而不是InputStream。鉴于资源是在Jar中打包的,您应该使用URL,因为无法从jar中读取文件。