ゲーム中に2つのwavサウンド(バックグラウンドミュージックとエフェクト)を同時に再生しようとしています。私は最初に、サウンドの再生、停止、ループを処理するJavaの別のオーディオハンドラーを使用して、このコードのチャンクを作成しました。このコンストラクトは、バックグラウンドミュージックまたはエフェクトを再生しますが、一度に1つだけ再生します。インターネットを見回して、サウンドを処理するためにjavax.sound.sampled.Clipを使用するように言われたので、同じ構成(再生、停止、ループ)を再利用しましたが、javax.sound.sampled.Clipを使用するように切り替えました。今、私は完全に迷子になっています。これまで読んだことから、すべてを正しく実行し、Eclipseエディターでエラーは発生しませんでしたが、実行すると、2つのエラーのうちの1つが発生します。eclipse(Linuxで実行)では、LineUnavailableExceptionがスローされます。Eclipse(Windows 7で実行)では、このコードの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();
}
}