2013-02-23 70 views
0

我试图制作一个播放声音的简单应用程序。我有一个名为sound.wav的声音文件位于我的Java项目中(使用eclipse btw)。我不确定如何导航到声音文件。问题是我不知道如何通过代码导航到声音文件。现在我正在运行的是抛出一个空指针异常,即。该文件不存在。这是我到目前为止的代码:在Java代码中查找文件

private static Sound sound; 

public static void main(String[] args) { 
    JFrame j = new JFrame("Sound"); 
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    j.setSize(300, 150); 
    sound = new Sound("/Users/Chris/Desktop/Workspace/Sound/sound.wav"); 
      //this is the problem line 
    JButton play = new JButton("Play"); 
    play.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      sound.play();    
     } 

    }); 

    j.add(play,BorderLayout.SOUTH); 
    j.setVisible(true); 
} 

这里是我的声音类的代码:

private AudioClip clip; 

public Sound(String fileName) { 
    try { 
     clip = Applet.newAudioClip(Sound.class.getResource(fileName)); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void play() { 
    try { 
     new Thread(){ 
      public void run() { 
       clip.play(); 
      } 
     }.start(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

我们不能帮你,直到你告诉我们,*什么是错的?* – 2013-02-23 16:31:33

+0

,什么是你的问题? – Azad 2013-02-23 16:32:01

回答

5

Class.getResource(),作为其javadoc的指示,从classpath读取资源。不是来自文件系统。

要么从文件中读取数据,要使用文件IO(即一个FileInputStream),或者要从类路径中读取数据,并且应该使用Class.getResource()并传递一个资源路径,从类路径。例如,如果sound.wav是在运行时类路径,在包com.foo.bar.sounds,代码应该是

Sound.class.getResource("/com/foo/bar/sounds/sound.wav") 
+0

我将如何去获取文件的资源路径? – SgtStud 2013-02-23 16:35:14

+0

阅读我的答案。我完成了它。 – 2013-02-23 16:35:35

+0

完美的作品。非常感激! – SgtStud 2013-02-23 16:37:56