Ich versuche, zwei WAV-Sounds gleichzeitig zu spielen (Hintergrundmusik und ein Effekt). Ich habe diesen Codeabschnitt zuerst mit einem anderen Audio-Handler in Java erstellt, der das Abspielen, Stoppen und Looping des Sounds übernimmt. Dieses Konstrukt würde die Hintergrundmusik oder den Hintergrundeffekt spielen, aber nur jeweils einzeln. Ich schaute mich im Internet um und wurde gebeten, javax.sound.sampled.Clip zu verwenden, um die Sounds zu behandeln, so dass das gleiche Konstrukt (play, stop, loop) wiederverwendet wurde, aber es wurde javax.sound.sampled.Clip verwendet. Jetzt bin ich völlig verloren. Von dem, was ich bisher gelesen habe, habe ich alles richtig gemacht und bekomme keine Fehler im Eclipse-Editor, aber wenn ich es ausführe, erhalte ich einen von zwei Fehlern. In Eclipse (unter Linux) wird eine LineUnavailableException ausgelöst. In Eclipse (läuft unter Windows 7) bekomme ich eine java.lang.NullPointerException im Abschnitt loop() dieses Codes. Wenn Sie mir zeigen könnten, was ich falsch mache oder auf relevante Dokumente verweisen, würde ich es begrüßen. Ich nehme an, es ist etwas mit meinem Code, der Ausnahmen behandelt, aber ich bin mir nicht sicher. Wenn Sie irgendwelche anderen scheußlichen Code-Fehltritte sehen, lassen Sie es mich bitte wissen. Ich bemühe mich, der beste Programmierer zu sein, den ich kann, und schätze wirklich konstruktive Kritik. Vielen Dank für Ihre Zeit.Verwenden Sie javax.sound.sampled.Clip, um mehrere Sounds in einem Spiel zu spielen, zu loopen und zu stoppen. Unerwartete Fehler
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();
}
}