2010-06-22 71 views
2

我有一個JOGL組件的應用程序。當它關閉使用System.exit(0),我經常得到的異常:優雅地關閉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) 

我已經看到了這個問題Occasional InterruptedException when quitting a Swing application,但我沒有運行任何非守護線程。我想知道底層JOGL代碼是否將事件持續放入可能導致此錯誤的swing事件隊列中,因爲swing應用只會在事件隊列爲空時正常關閉。

有沒有辦法更乾淨關機?也許以某種方式停止JOGL主循環(我使用的是第三方工具,nasa worldwind,所以我不一定有權訪問運行該應用程序的主Animator)。

編輯:事實證明,這根本不是一個openGL問題。 OpenGL正在正常關閉,並且在我運行的關機鉤子中只有一場比賽。謝謝。

回答

0

事實證明,這是不是一個OpenGL問題都一定要打電話anim.stop()。 OpenGL正在正常關閉,並且在我運行的關機鉤子中只有一場比賽。謝謝。

2

確保您在調用System.exit()之前停止所有開始的操作。

,如果你開始使用

動畫動畫=新的動畫(畫布)的動畫; anim.start();

退出之前,你的程序

+0

我沒有開始任何動畫師,但有可能是世界風的openGL代碼。我試圖追查下來。 GLAutoDrawable中的display方法是否應該檢查它是否關閉,以便從方法返回? – 2010-06-22 14:58:01

+0

可以幫助,試試看 – 2010-06-22 17:55:46

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); 
}