2010-06-22 8 views
2

JOGL 구성 요소가있는 애플리케이션이 있습니다. 그것은을 System.exit (0)를 사용하여 종료 때, 나는 자주 예외를 얻을 : 나는이 질문에 Occasional InterruptedException when quitting a Swing application을 보았다Java OpenGL (JOGL) 앱을 정상적으로 종료

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) 

을하지만 실행 비 데몬 스레드가 없습니다. 기본 JOGL 코드가 이벤트 대기열이 비어있을 때 스윙 앱이 정상적으로 종료되므로이 오류를 일으킬 수있는 이벤트를 스윙 이벤트 대기열에 지속적으로 넣는 지 궁금합니다.

더 깨끗하게 종료하는 방법이 있습니까? 어쩌면 어떻게 든 JOGL 메인 루프를 멈출 수 있습니다. (제 3 자 툴인 nasa worldwind를 사용하고 있기 때문에 앱을 실행하는 메인 Animator에 액세스 할 필요는 없습니다).

편집 : 이것은 OpenGL 문제가 아님이 밝혀졌습니다. OpenGL은 제대로 종료되고 있었고 실행중인 종료 훅에 경주가있었습니다. 감사.

답변

0

에서 프로그램

2

System.exit()을 호출하기 전에 시작한 모든 작업을 중지하십시오.

당신이

애니메이터 ANIM = 새로운 애니메이터 (캔버스)를 사용하여 애니메이션을 시작하는 경우; anim.start(); 당신이이 전혀 OpenGL은 문제가 아니었다 밝혀 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); 
} 
+0

나는 애니메이터를 시작하지는 않지만 월드 와이드 OpenGL 코드가 가능할 수 있습니다. 나는 그것을 추적하려고 노력하고있다. GLAutoDrawable의 표시 메소드에서 메소드가 종료 될 때 종료되었는지 확인해야합니까? –

+0

도움을 주시면 사용해 볼 수 있습니다. –

3

를 종료하기 전에

은() anim.stop 호출해야합니다. OpenGL은 제대로 종료되고 있었고 실행중인 종료 훅에 경주가있었습니다. 감사.

관련 문제