3

我有一个想要导出为 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 不播放声音。



在此处输入图像描述

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

4

3 回答 3

3

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

由于路径的开头有一个“/”,因此 .wav 文件需要位于JAR中您指定的路径中,使用绝对路径(即声音目录需要位于 JAR 的根目录中, boing_x.wav 需要位于声音目录中)。

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

于 2013-01-18T18:53:01.537 回答
2

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

另请注意,您正在尝试播放“/sound/ boing_x.wav ”,但您还提到在 jar 中,在 /sound 中您有boing 3 _x.wav,因此文件名的名称中有一个额外的3

于 2013-01-18T18:35:30.877 回答
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());
        }
}
于 2013-03-09T14:03:57.667 回答