java.io.IOException:标记/重置不支持Java音频输入流/缓冲输入流

我正在创建一个2D Java平台游戏,我正试图在游戏运行时从.wav文件中播放音频……

下面是我创建的AudioPlayer类,用于将资源加载到音频输入流中

import javax.sound.sampled.*; import java.io.*; import java.util.*; import java.net.*; public class AudioPlayer { private Clip clip; public AudioPlayer(String s) { try { /************/ InputStream is = getClass().getResourceAsStream(s); AudioInputStream ais; BufferedInputStream bis = new BufferedInputStream(is); ais = AudioSystem.getAudioInputStream(bis); /************/ AudioFormat baseFormat = ais.getFormat(); AudioFormat decodeFormat = new AudioFormat( AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false); AudioInputStream dais = AudioSystem.getAudioInputStream(decodeFormat, ais); clip = AudioSystem.getClip(); clip.open(dais); } catch(Exception e) { e.printStackTrace(); } } public void play() { if(clip == null) return; stop(); clip.setFramePosition(0); clip.start(); } public void stop() { if(clip.isRunning()) clip.stop(); } public void toggle() { if(clip.isRunning()) { clip.stop(); } else { clip.start(); } } public void close() { stop(); clip.close(); } } 

当我直接从源代码编译和运行游戏时,音频工作正常,但当我尝试将文件压缩为.jar格式并运行.jar文件时,我得到错误:

 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(Unknown Source) at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source) at audio.AudioPlayer.<AudioPlayer.java:18) ... 

我不确定我是否正确设置缓冲输入流以使游戏以.jar格式运行。

任何关于如何解决这个问题的想法将不胜感激。

谢谢!

更改:

  /************/ InputStream is = getClass().getResourceAsStream(s); AudioInputStream ais; BufferedInputStream bis = new BufferedInputStream(is); ais = AudioSystem.getAudioInputStream(bis); /************/ 

对于这样的事情:

  /************/ URL url = getClass().getResource(s); AudioInputStream ais; ais = AudioSystem.getAudioInputStream(url); /************/ 

它将起作用,因为getResourceAsStream通常返回一个不可重定位的输入流,而如果你提供到AudioSystem的URL,它可以从URL建立任意数量的流,或将其包装在一个可重新定位的流中。