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メインループを停止するかもしれません(私はサードパーティのツールであるnasa worldwindを使用しているので、アプリを実行しているメインのアニメーターに必ずしもアクセスできるとは限りません)。

編集:これは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); アニメ.スタート();

プログラムを終了する前に必ず anim.stop() を呼び出してください

于 2010-06-22T14:49:11.927 に答える
0

これはopenGLの問題ではなかったことがわかりました。OpenGLは適切にシャットダウンされていて、実行していたシャットダウンフックで競合が発生しました。ありがとう。

于 2010-06-24T14:24:28.183 に答える