尝试在Java中播放声音:NullPointerException

时间:2015-01-09 12:29:28

标签: java swing nullpointerexception embedded-resource javax.sound.sampled

我正在尝试用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的参考。

2 个答案:

答案 0 :(得分:1)

click.wav出现问题,但在类路径中找不到,因此url成为null,因此NullPointerException

您应该将click.wav放在类路径上,以便程序找到它。最直接的方法是放入jar文件的根文件夹。

答案 1 :(得分:1)

最有可能在构建阶段有一个“资源”列表,这些资源从源树复制到输出编译类。通常它是一串正则表达式,如“ .txt; .json; ...”在您的情况下,您需要添加“ .wav”或手动复制文件到编译器输出位置。

大多数IDE(Eclipse | IteliJ IDEA)和一些ant构建脚本都提供资源复制。