【发布时间】:2014-03-10 05:45:40
【问题描述】:
我一直在学习如何在应用程序中使用声音,一切正常。但是当我将项目导出到一个可执行的 .jar 时,一切都变得糟糕了......
基本上,当应用程序加载时,窗口会打开,但它是空白的,没有加载任何内容。当我从应用程序中删除声音时,它在导出等时工作。
我在网上获得了以下代码,并对其进行了一些修改以满足我的需要。这看起来很简单,但由于某种原因它不起作用。正如我所说,在我的 ide(Eclipse) 中,当我运行它时,ecerything 工作正常......
我使用 WinRAR 和 'jar tf' 来检查文件是否与 .jar 捆绑在一起。
当我从命令行运行时,我得到一个 NullPointerException
java.lang.NullPointerException
at mr.myapp.Sound.loop(Sound.jav
at mr.myapp.GameComponent.run(Ga
at java.lang.Thread.run(Unknown Source)
这里是代码
package mr.myapp.Sound;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
public class Sound {
public static Sound main_menu = loadSound("/test.wav");
public static Sound game = loadSound("/song12.wav");
public static Sound shoot = loadSound("/shoot.wav");
public static Sound hit = loadSound("/hit.wav");
public static Sound fail = loadSound("/fail.WAV");
private Clip clip;
public static Sound loadSound(String fileName) {
Sound sound = new Sound();
try {
//AudioInputStream ais = AudioSystem.getAudioInputStream(Sound.class.getResource(fileName));
AudioInputStream ais = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(fileName));
Clip clip = AudioSystem.getClip();
clip.open(ais);
sound.clip = clip;
} catch (Exception e) {
System.out.println(e);
}
return sound;
}
public void play(){
if(clip == null) return;
stop();
clip.setFramePosition(0);
clip.start();
}
public void stop(){
if(clip.isRunning()) clip.stop();
}
public void close(){
stop();
clip.close();
}
public void loop(){
clip.loop(Clip.LOOP_CONTINUOUSLY);
}
public boolean isActive(){
return clip.isActive();
}
}
【问题讨论】:
-
哪一行抛出异常?
-
AudioInputStream ais = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(fileName));