我在我的应用程序中使用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()
。相反,您需要在dispose()
实例上调用CefClient
,然后再从其容器中删除任何浏览器UI组件。如果在删除UI组件后处理客户端(这是Window.dispose()
的一部分,则为时已晚)。