我有一个带JOGL组件的应用程序。当它使用System.exit(0)关闭时,我经常得到异常:
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at sun.java2d.Disposer.run(Disposer.java:125)
at java.lang.Thread.run(Thread.java:619)
我已经看到了这个问题Occasional InterruptedException when quitting a Swing application,但我没有运行任何非守护程序线程。我想知道基础JOGL代码是否持续将事件放在swing事件队列中,这可能会导致此错误,因为swing应用程序只有在事件队列为空时才能正常关闭。
有没有办法更干净地关机?也许以某种方式停止JOGL主循环(我正在使用第三方工具,nasa worldwind,所以我不一定能够访问运行应用程序的主Animator)。
编辑:事实证明这根本不是一个openGL问题。 OpenGL正在正常关闭,并且在我运行的关闭钩子中只有一场比赛。感谢。
答案 0 :(得分:3)
import java.awt.Frame;
import com.sun.opengl.util.Animator;
// ...
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
exit();
}
});
// ...
public static void exit(){
animator.stop();
frame.dispose();
System.exit(0);
}
答案 1 :(得分:2)
确保在调用System.exit()之前停止所有启动的内容;
如果您使用
启动动画师Animator anim = new Animator(画布); anim.start();
请务必在退出程序之前调用anim.stop()
答案 2 :(得分:0)
事实证明这根本不是一个openGL问题。 OpenGL正在正常关闭,并且在我运行的关闭钩子中只有一场比赛。感谢。