JCEF:CefApp处置并重新启动

问题描述 投票:0回答:1

我正在我的应用程序中使用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的方法是什么?

java chromium-embedded
1个回答
0
投票

如果要重用CefApp实例,则无法在其上调用dispose()。相反,您需要在dispose()实例上调用CefClient,然后再从其容器中删除任何浏览器UI组件。如果您在删除UI组件后处置客户端(这是Window.dispose()的一部分,那就太晚了。

© www.soinside.com 2019 - 2024. All rights reserved.