【发布时间】: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 17 和 Java 8 进行测试。 在 Eclipse 上运行,使用 VM 参数:
-Djava.library.path=./bin/lib/win64
我们将不胜感激。
【问题讨论】:
-
magpcss.org/ceforum/viewforum.php?f=17 的 JCEF 支持论坛是我提出此类问题的地方。
标签: java eclipse swing chromium-embedded