为什么getResourceAsStream()在JAR文件中不起作用?

时间:2015-06-07 14:59:18

标签: java audio jar inputstream getresource

我在静态方法中有以下代码:

clips.open(AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream("folder/sound.wav")));

此外,folderSound.java位于同一目录中。当我在Eclipse中运行程序时,会播放声音。但是,当我将文件导出到JAR文件时,声音不再播放。

如果我将getResourceAsStream()更改为getResource(),则Eclipse和JAR文件都会播放声音。为什么会这样?我已阅读并且许多人建议getResourceAsStream()在JAR文件中不起作用。是这种情况,如果是这样,为什么不呢?

1 个答案:

答案 0 :(得分:0)

我怀疑问题是 Class.getResourceAsStream(String)返回 InputStream Class.getResource(String)返回一个 URL 的。因此,在第一种情况下,我们实际上使用

AudioSystem.getAudioInputStream(InputStream inputStream) 

在第二种情况下,使用

AudioSystem.getAudioInputStream(URL url).

为什么这很重要?我认为主要的问题是当 InputStream 是参数时,标记/重置测试是在你的音频文件上完成的,并且失败了。当 URL 用作参数时,不会发生此测试。您可以查看 AudioSystem.getAudioInputStream 的API,以确认我在这里报告的内容。

getResourceAsStream 失败时是否收到错误消息?它是否偶然提到了标记/重置测试错误?如果您收到不同的错误消息,那么这可能不是正确的答案,还有其他事情正在发生。