资源.wav中的Java异常读取流

Tia*_*goM 3 java resources wav javasound embedded-resource

我想我的代码是好的,我的.jar文件及其好与它里面的.WAV ..但是,当我尝试加载它使用的getResourceAsStream我得到一个错误..

这是我的错误:

java.io.IOException: mark/reset not supported
    at java.util.zip.InflaterInputStream.reset(Unknown Source)
    at java.io.FilterInputStream.reset(Unknown Source)
    at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unkno
wn Source)
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
    at operation.MainWindowOperations.prepareAudio(MainWindowOperations.java
:92)
    at operation.MainWindowOperations.<init>(MainWindowOperations.java:81)
    at graphics.LaunchGraphics.<init>(LaunchGraphics.java:25)
    at run.RunApp.main(RunApp.java:14)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

private void prepareAudio() {
    try {

        InputStream is = this.getClass().getClassLoader().getResourceAsStream("beep.wav");
        inputStream = AudioSystem.getAudioInputStream(is);
        clip = AudioSystem.getClip();
        clip.open(inputStream);

    } catch (Exception ex) {
        ex.printStackTrace();

    }

}
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗?非常感谢!!

And*_*son 6

Java Sound需要为某些操作重新定位(标记/重置支持)输入流.如果你遇到这个问题,那是因为流不可重新定位.

绕过它的一种方法是将byte[]原始流放入a ByteArrayInputStream,它支持标记/重置.


关于Eric R.链接的问题的第二个答案也是可能的,看起来更简单.试试看,改变..

InputStream is = this.getClass().getClassLoader().getResourceAsStream("beep.wav");
inputStream = AudioSystem.getAudioInputStream(is);
Run Code Online (Sandbox Code Playgroud)

至:

URL url = this.getClass().getClassLoader().getResource("beep.wav");
inputStream = AudioSystem.getAudioInputStream(url);
Run Code Online (Sandbox Code Playgroud)