我在我的应用程序中使用 JCEF(Java Chromium 支持的框架)。
情况是,当用户单击“启动”按钮时,我必须启动浏览器窗口,当他关闭窗口时,我必须退出浏览器并进行清理。
代码是:
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
try {
CefApp.getInstance().dispose();
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
} finally {
dispose();
}
}
});
调用 dispose()
会使 cefApp 状态变为 TERMINATED。因此,当用户再次单击“启动”时,我尝试初始化 cefApp,它会显示
java.lang.IllegalStateException: CefApp was terminated
因为如果状态为 TERMINATED,CefApp.getInstance()
会抛出此错误。
如何处理并重新启动 CefApp 来克服这个问题?
最佳答案
如果您想重用CefApp
实例,则不能对其调用dispose()
。相反,您需要在从容器中删除任何浏览器 UI 组件之前在 CefClient
实例上调用 dispose()
。如果您在删除 UI 组件后处置客户端(作为 Window.dispose()
的一部分发生),那就太晚了。
关于java - JCEF : CefApp dispose and restart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61866217/