JCEF (Java Chromium Embedded Framework) 浏览器不加载内容; Eclipse 上只有空白屏幕

JCEF (Java Chromium Embedded Framework) Browser does not load content; only blank screen on Eclipse

一段时间以来,我一直在尝试让 Chromium 嵌入式框架 (JCEF) 的 Java 版本在 Eclipse 上运行。我能够验证库文件是否正常工作,因为如果我 运行 虚拟机上包含的示例 class 文件,程序 运行s 和一些网页就会显示出来。但是,如果我从 Eclipse 运行 程序中,程序将始终显示空白 window。我能够验证库二进制文件 jcef_helper.exe 是否成功 运行,但无论我如何 link .jar 文件和其他库文件,网页都不会生成,并且始终存在是一个空白屏幕。我不能在这里查明问题。我尝试指定路径,添加我的 OS 环境变量 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

不胜感激。

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

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

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