JxBrowser HEAVYWEIGHT 处置 WINDOW_CLOSE_REQUEST
JxBrowser HEAVYWEIGHT Dispose on WINDOW_CLOSE_REQUEST
我目前正在使用 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 从未处理过 receive/process 该消息。
有什么想法吗?
看来在调用dispose之前需要确保stage已经关闭。
stage.close();
browser_view.getBrowser().dispose();
Platform.exit();
请尝试异步调用此代码。也许这只是一个僵局:
Platform.runLater(new Runnable() {
@Override
public void run() {
browser_view.getBrowser().dispose();
Platform.exit();
}
});
正如我之前回答的那样,解决方案是在隐藏(关闭)舞台后处理浏览器。
一个好的方法是将这些命令放在 JavaFX 应用程序的 stop()
方法上。
因此,无论您以何种方式关闭 window(通过单击关闭按钮或以编程方式调用 Platform.exit()
),浏览器都会处理(并且整个应用程序将完成并退出)。
类似的东西:
@Override
public void stop() throws Exception {
stage.hide();
browser.dispose();
}
作为参考,我使用了此处描述的配置 link(部分:9. 弹出窗口 Windows)。
Platform.runLater(() -> {
browser.dispose();
});
Platform.runLater(() -> {
stage.close();
});
我目前正在使用 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 从未处理过 receive/process 该消息。
有什么想法吗?
看来在调用dispose之前需要确保stage已经关闭。
stage.close();
browser_view.getBrowser().dispose();
Platform.exit();
请尝试异步调用此代码。也许这只是一个僵局:
Platform.runLater(new Runnable() {
@Override
public void run() {
browser_view.getBrowser().dispose();
Platform.exit();
}
});
正如我之前回答的那样,解决方案是在隐藏(关闭)舞台后处理浏览器。
一个好的方法是将这些命令放在 JavaFX 应用程序的 stop()
方法上。
因此,无论您以何种方式关闭 window(通过单击关闭按钮或以编程方式调用 Platform.exit()
),浏览器都会处理(并且整个应用程序将完成并退出)。
类似的东西:
@Override
public void stop() throws Exception {
stage.hide();
browser.dispose();
}
作为参考,我使用了此处描述的配置 link(部分:9. 弹出窗口 Windows)。
Platform.runLater(() -> {
browser.dispose();
});
Platform.runLater(() -> {
stage.close();
});