我試圖在遊戲過程中一次播放兩個wav聲音(背景音樂和效果)。我首先使用java中的另一個音頻處理程序構建了這段代碼,它將處理播放,停止和循環聲音。這種構造會一次播放背景音樂或效果,但只能播放一種。我環顧了互聯網,並被告知使用javax.sound.sampled.Clip處理聲音,以便重複使用相同的構造(播放,停止,循環),但將其切換爲使用javax.sound.sampled.Clip。現在我完全失去了。從我迄今爲止讀過的內容中,我已經完成了所有的事情,並且在eclipse編輯器中沒有發現任何錯誤,但是當我運行它時,我得到了兩個錯誤之一。在eclipse中(在Linux上運行)拋出一個LineUnavailableException。在eclipse中(在Windows 7上運行),我在此代碼的loop()部分中得到一個java.lang.NullPointerException。如果你能告訴我我做錯了什麼,或者指向我一些相關的文檔,我會很感激。我假設它的代碼處理異常,但我不確定。如果你看到任何其他可怕的代碼失誤,請讓我知道我努力成爲最好的程序員,我真的很感激建設性的批評。感謝您的時間。使用javax.sound.sampled.Clip播放,循環並停止遊戲中的多個聲音。意外錯誤
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();
}
}