Eclipse的JAR文件不播放声音

时间:2013-01-18 18:33:13

标签: java embedded-resource

我有一个项目要导出为jar文件。该软件应该在某个时间点播放声音。但是,问题是当达到该时间点时,JAR文件不播放声音文件。当我从Eclipse IDE运行相同的项目时,它确实如此。

以下是显示我如何设置声音播放功能的代码:

public void setupSoundPlayback(){
        try{
            buzzer = AudioSystem.getClip();

            in = AudioSystem.getAudioInputStream(BatteryBeeper.class.
                    getResourceAsStream("/sound/boing_x.wav"));

            buzzer.open(in);
        }catch(Exception e){
            e.printStackTrace();
        }

    }  

稍后,我调用play()对象的Clip方法。 虽然我使用getResourceAsStream()方法播放嵌入式声音,但JAR不播放声音



enter image description here

当我被告知提取并查看声音文件是否在适当的位置时,我做到了。这就是我得到的。声音文件夹位于根目录中。 boing3_x.wav位于声音文件夹中(不在图片中)。

3 个答案:

答案 0 :(得分:3)

由于您正在使用呼叫getResourceAsStream("/sound/boing_x.wav");,因此应确保.wav文件在JAR中包含在正确的位置。

因为你有' /'在路径的开头,.wav文件需要使用绝对路径定位在您指定的路径中的JAR 内(即声音目录需要位于JAR的根目录中,和boing_x.wav需要位于声音目录中)。

我建议您将JAR文件解压缩到特定目录,并确保在解压缩JAR时,您会看到/sound/boing_x.wav

答案 1 :(得分:2)

如果资源(在您的情况下为.wav文件)未嵌入到构建的.jar文件中或嵌入在错误的位置,则会发生这种情况。

另请注意,您正在尝试播放“/ sound / boing_x.wav ”,但您还要在jar中提及/声音 boing 3 _x.wav ,因此文件名名称中包含额外的 3

答案 2 :(得分:1)

这是我在jar中播放循环声音文件的功能,它对我来说很好。

似乎getResourceAsStream()不适用于广告。但是,getResource()确实如此。

public synchronized void alarm() {
    try {
        crit = AudioSystem.getClip();
        AudioInputStream inputStream1 = AudioSystem.getAudioInputStream(this.getClass().getResource("critical.wav"));
        crit.open(inputStream1);
        crit.loop(Clip.LOOP_CONTINUOUSLY);

    } catch (Exception e) {
        System.err.println(e.getMessage());
        }
}