我有一个Swing应用程序,需要在其中显示内部生成的HTML / CSS。为了做到这一点,我改编了这个StackOverflow问题的代码。
该控件工作正常。但是,当应用程序结束时,我收到错误消息
# # 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应用程序中时,如何正确关闭它呢?
Platform.exit()
好的,至少在此应用程序中,我找到了解决方案:
这是一个多窗口应用程序;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 } });