【问题标题】:JCEF (Java Chromium Embedded Framework) Browser does not load content; only blank screen on EclipseJCEF(Java Chromium Embedded Framework)浏览器不加载内容; Eclipse 上只有黑屏
【发布时间】:2022-01-20 21:47:46
【问题描述】:

一段时间以来,我一直试图让 Chromium Embedded Framework (JCEF) 的 Java 版本在 Eclipse 上运行。我能够验证库文件是否正常工作,因为如果我在 VM 上运行包含的示例类文件,程序会运行并显示一些网页。但是,如果我从 Eclipse 运行该程序,该程序将始终显示一个空白窗口。我能够验证库二进制jcef_helper.exe 是否成功运行,但是无论我如何链接.jar 文件和其他库文件,网页都不会生成,并且总是会出现空白屏幕。我无法在这里查明问题。我尝试指定路径,添加我的操作系统环境变量 PATH 字段的 JCEF 库路径无济于事。我遵循了文档,当我与编译/运行有任何关系时,即使示例文件的行为方式也相同。有趣的是,我的 Eclipse 控制台将在运行期间显示:

initialize on Thread[AWT-EventQueue-0,6,main]

也许是线程问题?

有问题的代码:

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import org.cef.CefApp;
import org.cef.CefApp.CefAppState;
import org.cef.CefClient;
import org.cef.CefSettings;
import org.cef.browser.CefBrowser;
import org.cef.handler.CefAppHandlerAdapter;

public class WebV
{
    public static void main(String args[])
    {
        Dimension dispDimension = Toolkit.getDefaultToolkit().getScreenSize();
        int width = (int)Math.round(dispDimension.getWidth() / 2);
        int height = (int)Math.round(dispDimension.getHeight() / 2);

        CefApp.addAppHandler(new CefAppHandlerAdapter(null)
        {
            @Override
            public void stateHasChanged(CefAppState state)
            {
                if(state == CefAppState.TERMINATED)
                {
                    System.exit(0);
                }
            }
        });
        CefSettings settings = new CefSettings();
        settings.windowless_rendering_enabled = false;
        CefApp cefApp = CefApp.getInstance(settings);
        CefClient client = cefApp.createClient();
        CefBrowser browser = client.createBrowser("http://www.google.com", false, false);
        Component browserComponent = browser.getUIComponent();

        JFrame frame = new JFrame();
        frame.setTitle("WebV");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(width, height);
        frame.setResizable(true);
        frame.setLocationRelativeTo(null);

        frame.add(browserComponent);
        frame.setVisible(true);
    }
}

使用 Java 17Java 8 进行测试。 在 Eclipse 上运行,使用 VM 参数:

-Djava.library.path=./bin/lib/win64

我们将不胜感激。

【问题讨论】:

标签: java eclipse swing chromium-embedded


【解决方案1】:

此答案由 JCEF 论坛上的“Yanovsky”提供。 JCEF 包提供的简单示例是不完整的。 我们需要向浏览器客户端添加一个CefMessageRouter 实例。这在详细的例子中得到了证明,但不是简单的例子。这段代码应该在我们创建CefBrowser 实例之前添加,之后我们创建一个CefClient 对象:

CefMessageRouter msgRouter = CefMessageRouter.create();
msgRouter.addHandler(new MessageRouterHandler(), true);
msgRouter.addHandler(new MessageRouterHandlerEx(client), false);
client.addMessageRouter(msgRouter);

作为参考,这是我在 JCEF 论坛上的帖子: https://magpcss.org/ceforum/viewtopic.php?f=17&t=18834&sid=45381db639d1621f2f8b38b4d8848800

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多