[英]Java Sound Clip fails to play after multiple plays
我在游戲中使用Clips。 剪輯播放正常,但是經過一些“射擊”后,出現以下問題
線程“ PulseAudio Eventloop線程”中的異常java.lang.IllegalStateException:org.classpath.icedtea.pulseaudio.EventLoop.run(EventLoop.java:133)上的org.classpath.icedtea.pulseaudio.EventLoop.native_iterate(Native_iterate(Native Method))失敗)在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]);
}
因此,我在OS X上遇到了類似的問題,如果您嘗試停止剪輯並從頭開始重新播放,則有時無法播放該剪輯。 我通過在stop()
之后立即調用flush()
修復它:
if(clip.isActive() || clip.isRunning()) {
clip.stop();
clip.flush();
}
您無需生成背景線程即可與Clip交互。 Clip的最常用方法(例如“啟動”和“停止”)是異步運行的,這意味着它們不會阻塞,因此可以從GUI / AWT / Swing線程調用它們。
該頁面有一些合理的示例: http : //www3.ntu.edu.sg/home/ehchua/programming/java/J8c_PlayingSound.html
我看到您正在使用IcedTea和PulseAudio。 與在Oracle JVM中相反,在此JVM中使用javax.sound時,您可能會遇到不同的行為,因為這兩個產品之間javax.sound的實現有很大不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.