【发布时间】:2013-08-30 16:21:33
【问题描述】:
我在游戏中使用 Clips。剪辑播放正常,但经过一些“镜头”后,出现以下问题
线程“PulseAudio Eventloop 线程”java.lang.IllegalStateException 中的异常:排水失败 在 org.classpath.icedtea.pulseaudio.EventLoop.native_iterate(Native Method) 在 org.classpath.icedtea.pulseaudio.EventLoop.run(EventLoop.java:133) 在 java.lang.Thread.run(Thread.java:724)
我的代码:
public static Clip[] sounds;
...
sounds = new Clip[3];
sounds[0] = getClip("gun.wav");
sounds[1] = getClip("click.wav");
sounds[2] = getClip("over.wav");
...
private void playSound(Clip clp) {
final Clip clip = clp;
Runnable soundPlayer = new Runnable() {
@Override
public void run() {
try {
if(clip.isActive() || clip.isRunning()) clip.stop();
clip.setMicrosecondPosition(0);
clip.start();
} catch (Exception e) {
e.printStackTrace();
}
}
};
new Thread(soundPlayer).start();
}
public void shoot() { //runs when space is clicked
if(canShoot) playSound(sounds[0]);
}
【问题讨论】:
-
java.lang.IllegalStateException 通常是在线程启动多次时引起的。
-
不确定您的
getClip()方法是如何实现的,但您应该尽量不要重复使用剪辑。 -
@MoritzPetersen 但游戏导出为小程序,我不想重新下载整个数据。
标签: java multithreading audio clip