【问题标题】:JavaFX error when ending Swing application结束 Swing 应用程序时出现 JavaFX 错误
【发布时间】:2013-08-16 12:15:02
【问题描述】:

我有一个 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(),但错误仍然存​​在。那么,当 JavaFX 嵌入到 Swing 应用程序中时,如何正确关闭它呢?

【问题讨论】:

    标签: java swing javafx


    【解决方案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
        }
    });
    

    【讨论】:

    • 如果 setImplicitExit(false) 已设置,您不应该调用 Platform.exit,否则 JavaFx 线程将继续运行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2018-11-03
    • 2020-11-12
    相关资源
    最近更新 更多