2013-08-16 3 views
0

У меня есть приложение Swing, в котором мне нужно отображать встроенные HTML/CSS. Для этого я применил the code from this StackOverflow question.Ошибка JavaFX при завершении приложения Swing

Управление работает нормально. Однако, когда заканчивается приложение, я получаю ошибку

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# SIGSEGV (0xb) at pc=0x00007f9622171ae8, pid=5782, tid=140283095549696 

Для чего это стоит, образец кода непосредственно из Oracle (цит пост StackOverflow) имеет ту же проблему.

Я попытался явно позвонить Platform.exit(), когда окно закрывается, но ошибка остается. Итак, как правильно закрыть JavaFX, когда он встроен в приложение Swing?

ответ

1

Хорошо, я нашел решение, по крайней мере, для такого применения:

  • Это приложение мульти-окна; компонент JavaFX находится не в главном окне приложения, а в под-окне.

  • В «Платформе JavaFX» есть параметр «ImplicitExit», который по умолчанию «true».

  • JavaFX Platform.exit(), по-видимому, называется как при закрытии подзаголовника, так и при закрытии основного приложения. Этот второй вызов (когда приложение закрыто) генерирует сообщение об ошибке, описанное в исходном вопросе.

  • Поведение «неявного выхода» в любом случае нежелательно, поскольку оно предотвращает повторное открытие вспомогательного окна во время жизни приложения.

Следовательно, решение состоит в отключении «неявного выхода». Вот код инициализации JavaFX в подокне:

Platform.runLater(new Runnable() { 
    @Override public void run() { 
     view = new WebView(); 
     engine = view.getEngine(); 
     jfxPanel.setScene(new Scene(view)); 
     Platform.setImplicitExit(false); // Otherwise cannot open report window a second time 
    } 
}); 
+0

Вы не должны называть Platform.exit, то в случае setImplicitExit (ложь) было установлено иначе JavaFX поток будет продолжать работать? –