代码之家  ›  专栏  ›  技术社区  ›  Jeff Storey

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

  •  2
  • Jeff Storey  · 技术社区  · 14 年前

    我有一个带有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,所以我不必访问运行该应用程序的主动画师)。

    编辑:原来这根本不是openGL的问题。OpenGL被正确地关闭了,我运行的关闭钩子中有一个竞赛。谢谢。

    3 回复  |  直到 8 年前
        1
  •  3
  •   slf    14 年前

    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);
    }
    
        2
  •  2
  •   Nikolaus Gradwohl    14 年前

    如果你用

    Animator anim=新的动画师(画布);

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

        3
  •  0
  •   Jeff Storey    14 年前

    原来这根本不是openGL的问题。OpenGL被正确地关闭了,我运行的关闭钩子中有一个竞赛。谢谢。