我正在尝试用Java播放声音,但它不起作用,我收到了错误消息。 这是我的代码
public class PlaySoundClip extends JFrame {
public PlaySoundClip() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Test Sound Clip");
this.setSize(300, 200);
this.setVisible(true);
try {
URL url = this.getClass().getClassLoader().getResource("click.wav");
AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);//Line 27
// Get a sound clip resource.
Clip clip = AudioSystem.getClip();
// Open audio clip and load samples from the audio input stream.
clip.open(audioIn);
clip.start();
clip.loop(Clip.LOOP_CONTINUOUSLY); // repeat forever
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new PlaySoundClip();//Line 44
}
}
我收到此错误信息然后我就不在这里了!如何解决这个问题?
Exception in thread "main" java.lang.NullPointerException
at com.sun.media.sound.StandardMidiFileReader.getSequence(StandardMidiFileReader.java:205)
at javax.sound.midi.MidiSystem.getSequence(MidiSystem.java:836)
at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(SoftMidiAudioFileReader.java:174)
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1145)
at playsoundclip.PlaySoundClip.<init>(PlaySoundClip.java:27)
at playsoundclip.PlaySoundClip.main(PlaySoundClip.java:44)
来自Playing Sound的参考。
答案 0 :(得分:1)
click.wav
出现问题,但在类路径中找不到,因此url
成为null
,因此NullPointerException
。
您应该将click.wav
放在类路径上,以便程序找到它。最直接的方法是放入jar
文件的根文件夹。
答案 1 :(得分:1)
最有可能在构建阶段有一个“资源”列表,这些资源从源树复制到输出编译类。通常它是一串正则表达式,如“ .txt; .json; ...”在您的情况下,您需要添加“ .wav”或手动复制文件到编译器输出位置。
大多数IDE(Eclipse | IteliJ IDEA)和一些ant构建脚本都提供资源复制。