JxBrowser HEAVYWEIGHT在WINDOW_CLOSE_REQUEST

时间:2016-03-05 21:36:00

标签: javafx jxbrowser

我目前正在使用JxBrowser 6.2的评估许可证。

我按如下方式创建BrowserView:

Browser browser = new Browser(BrowserType.HEAVYWEIGHT);
BrowserView browser_view = new BrowserView(browser);

我按如下方式附加了BrowserView组件:

stage.setScene(new Scene(browser_view));

如果浏览器配置为在轻量级模式下运行,我可以执行:

browser_view.getBrowser().dispose();
Platform.exit();

但是,如果将浏览器配置为在HEAVYWEIGHT模式下运行,则应用程序在执行时会挂起:

browser_view.getBrowser().dispose();

我可以在日志中看到Dispose消息已写入,但似乎JxBrowser Chromium进程从未接收/处理消息。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

在我之前回答,解决方法是在隐藏(关闭)舞台后处理浏览器 一种好的方法是将这些命令放在JavaFX Application的stop()方法上 因此,无论是关闭窗口(通过单击关闭按钮或通过调用Platform.exit()以编程方式),浏览器都将处置(整个应用程序将完成并退出)。

类似的东西:

@Override
public void stop() throws Exception {
    stage.hide();
    browser.dispose();
}

答案 1 :(得分:1)

作为参考,我使用了此处描述的配置link(第9节:弹出窗口)。

Platform.runLater(() -> {
    browser.dispose();
});

Platform.runLater(() -> {
    stage.close();
});

答案 2 :(得分:0)

看起来你需要确保在调用dispose之前关闭了舞台。

stage.close();
browser_view.getBrowser().dispose();
Platform.exit();

答案 3 :(得分:0)

请尝试异步调用此代码。也许它只是一个僵局:

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        browser_view.getBrowser().dispose();
        Platform.exit();
    }
});