Java AudioInputStream作为jar/zip导出后不工作

Java AudioInputStream作为jar/zip导出后不工作,java,maven,audio,export,mp3,Java,Maven,Audio,Export,Mp3,所以我尝试通过mp3spi库播放声音(mp3文件)。我应该补充一点,这个项目是要在另一个程序中运行的(比如和add-on),所以它本身除了调试类之外没有任何主类。当我从这个调试类运行项目时,一切都很好,但是当从主程序内部运行它时(我应该补充一点,加载项作为jar和zip文件导出,zip文件将加载到主程序中),我得到一个javax.sound.sampled.UnsupportDaudioFileException。我认为这个问题与插件没有正确连接到库有关,但是所有mp3spi JAR都包含在li

所以我尝试通过mp3spi库播放声音(mp3文件)。我应该补充一点,这个项目是要在另一个程序中运行的(比如和add-on),所以它本身除了调试类之外没有任何主类。当我从这个调试类运行项目时,一切都很好,但是当从主程序内部运行它时(我应该补充一点,加载项作为jar和zip文件导出,zip文件将加载到主程序中),我得到一个javax.sound.sampled.UnsupportDaudioFileException。我认为这个问题与插件没有正确连接到库有关,但是所有mp3spi JAR都包含在lib文件夹中

我们正在使用maven构建所有附加组件和主程序,因此我还尝试将类路径添加到清单文件中。(在maven jar插件中,就像在许多其他堆栈溢出帖子中建议的那样)它似乎对其他人有效,但对我无效。其他人也建议让jar可以运行,所以我添加了debug类作为主类,然后再试一次,结果也不起作用

不管怎么说,我完全迷路了,因为我已经没有办法尝试了。任何帮助都将不胜感激

以下是再次导致错误的代码:

 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>
    <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>

org.apache.maven.plugins
maven jar插件
2.4
${plugin.id}
${plugin.class}
${plugin.version}
${plugin.provider}
${plugin.dependencies}
符合事实的
符合事实的
符合事实的
jundl77.izou.izoound.Debug

无论如何,再次感谢您的帮助。

最好直接从URL或文件创建AudioInputStream,而不是InputStream。考虑到资源打包在一个Jar中,您应该使用URL,因为您无法从Jar中读取文件。

好的,但问题是,声音文件不在资源文件夹中,声音文件应该可以位于系统的任何位置。此外,输入流已经是音频输入流。另外,我认为这个问题与java有关,它以某种方式引用了默认的javax.sound.sampled库,而不是tritonus附带的库,可能是这样吗?如果是这样的话,你知道我如何把它传达给编译器吗?使用InputStream作为getAudioInputStream的输入有一个已知的问题。如果您查阅AudioSystem.getAudioInputStream的API,您将看到当in-InputStream是一个参数时,会对输入文件进行附加测试,例如标记能力、重置能力。音频文件往往无法通过这些测试。URL输入参数是最健壮的,imho。AudioSystem是javax.sound.sampled。我建议你先试试这个,排除它,然后再深入研究小麦的问题。啊,谢谢!事实证明,这并没有改变任何事情:(但没关系,我现在使用的是javafx media和mediaplayer,它最终起作用了,但谢谢你的帮助!一个简单的问题是,如果你知道答案,你知道mediaplayer是流式播放声音还是缓冲所有声音吗?(换句话说,它在系统中相对较轻吗?)我从未查看过JavaFX音频。很高兴听到它对您有用!使用Java,您可以选择是流式传输(SourceDataLine)还是先加载到内存(Clip)。SourceDataLine会立即启动,但会以一定的缓冲量增量处理数据(2K或更多)。对于剪辑,整个文件必须加载到内存中才能开始播放。我不知道JavaFX音频选项是否类似。打开mp3当然会增加处理过程。这取决于您是要提前(剪辑)还是继续(SDL)。