我正在尝试在游戏中同时播放两个wav声音(背景音乐和效果音)。我最初使用Java中的另一个音频处理程序构建了这段代码,该程序将处理声音的播放、停止和循环。这个结构会播放背景音乐或效果音,但一次只能播放一个。我在互联网上搜索后得知可以使用javax.sound.sampled.Clip来处理声音,于是重用了相同的结构(播放、停止、循环),但切换到了使用javax.sound.sampled.Clip。现在我完全迷失了方向。从我到目前为止所读到的内容来看,我已经做得没错,在eclipse编辑器中也没有错误,但是当我运行它时,会出现以下两种错误之一。在Linux上运行的eclipse中,抛出LineUnavailableException异常。在Windows 7上运行的eclipse中,我在此代码的loop()部分中得到了java.lang.NullPointerException。如果您能告诉我我做错了什么,或者指点我一些相关的文档,我将不胜感激。我认为这可能与我的异常处理代码有关,但我不确定。如果您发现任何其他可怕的代码错误,请让我知道,我正在努力成为最好的程序员,并真的感谢建设性的批评。谢谢您的时间。
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
/**
* Handles play, pause, and looping of sounds for the game.
* @author Tyler Thomas
*
*/
public class Sound {
private Clip myClip;
public Sound(String fileName) {
try {
File file = new File(fileName);
if (file.exists()) {
Clip myClip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(file.toURI().toURL());
myClip.open(ais);
}
else {
throw new RuntimeException("Sound: file not found: " + fileName);
}
}
catch (MalformedURLException e) {
throw new RuntimeException("Sound: Malformed URL: " + e);
}
catch (UnsupportedAudioFileException e) {
throw new RuntimeException("Sound: Unsupported Audio File: " + e);
}
catch (IOException e) {
throw new RuntimeException("Sound: Input/Output Error: " + e);
}
catch (LineUnavailableException e) {
throw new RuntimeException("Sound: Line Unavailable: " + e);
}
}
public void play(){
myClip.setFramePosition(0); // Must always rewind!
myClip.loop(0);
myClip.start();
}
public void loop(){
myClip.loop(Clip.LOOP_CONTINUOUSLY);
}
public void stop(){
myClip.stop();
}
}