1

我正在尝试在 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)      

参考播放声音

4

2 回答 2

1

有问题click.wav,在类路径上找不到它,所以url变成null了 ,因此NullPointerException.

你应该把它click.wav放在你的类路径上,这样程序就会找到它。最直接的方法是放入文件的根文件夹jar

于 2015-01-09T12:33:08.840 回答
1

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

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

于 2015-01-09T12:48:39.017 回答