我在我的应用程序中使用了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 状态变为"已终止"。因此,当用户再次单击启动时,我尝试启动cefApp,它说
java.lang.IllegalStateException: CefApp was terminated
因为如果状态为 TERMINATED,CefApp.getInstance()
会引发此错误。
如何处置和重新启动 CefApp 来克服这个问题?
如果要重用CefApp
实例,则无法在其上调用dispose()
。相反,您需要在CefClient
实例上调用dispose()
,然后再从其容器中删除任何浏览器 UI 组件。如果在删除 UI 组件(作为Window.dispose()
的一部分(后释放客户端,则为时已晚。
怎么样,找到一种方法不关闭JCEF,而只是Set.Visible(false(