2016-04-24 72 views
2

我试图制作一个应用程序,当我点击一个JButton时,播放一首歌曲。我已经想出了如何指定JButton。但是,我似乎无法找到播放声音的方法。我不打算使用sun.audio,因此我看到的许多线程都无法工作。我发现许多低质量的答案。最终,我解决了这个代码。查找播放声音的文件

public static synchronized void playSound(final String url) { 
    new Thread(new Runnable() { 
public void run() { 
    try { 
     Clip clip = AudioSystem.getClip(); 
     AudioInputStream inputStream = AudioSystem.getAudioInputStream(
     Main.class.getResourceAsStream("/path/to/sounds/" + url)); 
     clip.open(inputStream); 
     clip.start(); 
     } catch (Exception e) { 
     System.err.println(e.getMessage()); 
     } 
    } 
    }).start(); 
} 

在我的src文件夹中,我有一个名为“Songs”的文件夹。我改变的文件路径是: /歌/

然后,我打过电话使用wav文件的功能:

playSound("song.wav"); 

然后我得到一个空的错误。我相信这是因为它无法识别文件路径。我的问题的答案很可能非常明显,但不知何故,我无法找到它。

回答

0

将song.wav放在Main类的相同文件夹中,然后getResourceAsStream会找到它。

如果您使用的是eclipse,它可以自动将.wav文件复制到输出文件夹。

您可能想要在某个不同的Java包上创建一个类,以便您的入口点不受资产污染。

该阅读可能会对您有所帮助:http://www.thinkplexx.com/learn/howto/java/system/java-resource-loading-explained-absolute-and-relative-names-difference-between-classloader-and-class-resource-loading