我在静态方法中有以下代码:
clips.open(AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream("folder/sound.wav")));
此外,folder
与Sound.java
位于同一目录中。当我在Eclipse中运行程序时,会播放声音。但是,当我将文件导出到JAR文件时,声音不再播放。
如果我将getResourceAsStream()
更改为getResource()
,则Eclipse和JAR文件都会播放声音。为什么会这样?我已阅读并且许多人建议getResourceAsStream()
在JAR文件中不起作用。是这种情况,如果是这样,为什么不呢?
答案 0 :(得分:0)
我怀疑问题是 Class.getResourceAsStream(String)返回 InputStream , Class.getResource(String)返回一个 URL 的。因此,在第一种情况下,我们实际上使用
AudioSystem.getAudioInputStream(InputStream inputStream)
在第二种情况下,使用
AudioSystem.getAudioInputStream(URL url).
为什么这很重要?我认为主要的问题是当 InputStream 是参数时,标记/重置测试是在你的音频文件上完成的,并且失败了。当 URL 用作参数时,不会发生此测试。您可以查看 AudioSystem.getAudioInputStream 的API,以确认我在这里报告的内容。
getResourceAsStream 失败时是否收到错误消息?它是否偶然提到了标记/重置测试错误?如果您收到不同的错误消息,那么这可能不是正确的答案,还有其他事情正在发生。