我有一个Swing应用程序,我需要在其中显示内部生成的HTML / CSS。为了做到这一点,我改编了the code from this StackOverflow question。
控件工作正常。但是,当应用程序结束时,我收到错误
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f9622171ae8, pid=5782, tid=140283095549696
对于它的价值,直接来自Oracle的示例代码(在StackOverflow帖子中引用)也存在同样的问题。
我已经尝试在窗口关闭时显式调用Platform.exit()
,但错误仍然存在。那么,当它嵌入Swing应用程序时,如何正确关闭JavaFX?
答案 0 :(得分:2)
好的,我找到了解决方案,至少对于这个应用程序来说:
这是一个多窗口应用程序; 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
}
});