2

我有一个带有 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)

在退出 Swing 应用程序时看到了这个问题 Occasional InterruptedException,但我没有运行任何非守护线程。我想知道底层的 JOGL 代码是否不断地将事件放入 Swing 事件队列中,这可能会导致此错误,因为 Swing 应用程序只会在事件队列为空时正确关闭。

有没有办法更干净地关机?也许以某种方式停止 JOGL 主循环(我正在使用 3rd 方工具,nasa worldwind,所以我不一定有权访问运行应用程序的主 Animator)。

编辑:事实证明这根本不是 openGL 问题。OpenGL 正在正确关闭,而我正在运行的关闭挂钩中只是一场比赛。谢谢。

4

3 回答 3

3

来自JOGL 维基页面

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);
}
于 2010-06-22T14:51:57.887 回答
2

确保在调用 System.exit() 之前停止所有已启动的操作;

如果您使用

动画师 anim = new Animator(canvas); 动画.start();

请务必在退出程序之前调用 anim.stop()

于 2010-06-22T14:49:11.927 回答
0

事实证明,这根本不是 openGL 问题。OpenGL 正在正确关闭,而我正在运行的关闭挂钩中只是一场比赛。谢谢。

于 2010-06-24T14:24:28.183 回答