结束Swing应用程序时出现JavaFX错误

时间:2013-08-16 12:15:03

标签: java swing javafx

我有一个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?

1 个答案:

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