Изящное завершение работы приложения Java OpenGL (JOGL) - PullRequest
2 голосов
/ 22 июня 2010

У меня есть приложение с компонентом 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)

Я видел этот вопрос Иногда InterruptedException при выходе из приложения Swing , но у меня нет запущенных потоков, не являющихся демонами. Мне интересно, если базовый код JOGL постоянно помещает события в очередь событий Swing, что может вызвать эту ошибку, поскольку приложение Swing будет корректно завершать работу только тогда, когда очередь событий пуста.

Есть ли способ более чистого отключения? Может быть, каким-то образом остановить основной цикл JOGL (я использую сторонний инструмент, nasa worldwind, поэтому у меня не обязательно есть доступ к основному Animator, запускающему приложение).

РЕДАКТИРОВАТЬ: Оказывается, это не проблема openGL вообще. OpenGL корректно завершал работу, и я просто участвовал в гонке с отключением. Благодаря.

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

С 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);
}
2 голосов
/ 22 июня 2010

убедитесь, что вы остановили все, что начали, перед вызовом System.exit ();

если вы запускаете аниматор с помощью

Animator anim = new Animator (canvas);anim.start ();

обязательно вызовите anim.stop () перед выходом из программы

0 голосов
/ 24 июня 2010

Оказывается, это не было проблемой openGL вообще. OpenGL корректно завершал работу, и я просто участвовал в гонке с отключением. Спасибо.

...