我有一个项目要导出为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
位于声音文件夹中(不在图片中)。
答案 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());
}
}