我在我的应用程序中使用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()的一部分,则为时已晚)。

10-01 23:58