3

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

我正在按如下方式创建 BrowserView:

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

我将 BrowserView 组件附加如下:

stage.setScene(new Scene(browser_view));

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

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

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

browser_view.getBrowser().dispose();

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

有任何想法吗?

4

4 回答 4

2

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

像这样的东西:

@Override
public void stop() throws Exception {
    stage.hide();
    browser.dispose();
}
于 2016-04-22T12:09:36.547 回答
1

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

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

Platform.runLater(() -> {
    stage.close();
});
于 2016-10-17T16:21:30.250 回答
0

看起来您需要确保在调用 dispose 之前已关闭阶段。

stage.close();
browser_view.getBrowser().dispose();
Platform.exit();
于 2016-03-05T22:15:55.013 回答
0

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

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        browser_view.getBrowser().dispose();
        Platform.exit();
    }
});
于 2016-03-07T09:02:39.697 回答