优雅地关闭Java OpenGL(JOGL)应用程序

时间:2010-06-22 14:37:30

标签: java swing opengl shutdown interrupted-exception

我有一个带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正在正常关闭,并且在我运行的关闭钩子中只有一场比赛。感谢。

3 个答案:

答案 0 :(得分:3)

来自JOGL wiki page

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正在正常关闭,并且在我运行的关闭钩子中只有一场比赛。感谢。