我已经使用以下版本为MAC构建了jcef MAC 10.13.4
Xcode 9.3
java 1.8.0_171和1.8.0_191都尝试过
根据说明https://bitbucket.org/chromiumembedded/java-cef/wiki/BranchesAndBuilding构建的JCEF
用于Java开发人员的Luna Service Luna Service Release 1(4.4.1)
我创建了一个eclipse项目并导入了所有jar,在项目中复制了Release文件夹,然后我尝试按照MainFrame.java示例运行
package jcefdemo;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import org.cef.CefApp;
import org.cef.CefApp.CefAppState;
import org.cef.CefClient;
import org.cef.CefSettings;
import org.cef.OS;
import org.cef.browser.CefBrowser;
import org.cef.handler.CefAppHandlerAdapter;
import java.lang.reflect.Field;
public class MainFrame extends JFrame {
private static final long serialVersionUID = -5570653778104813836L;
private final JTextField address_;
private final CefApp cefApp_;
private final CefClient client_;
private final CefBrowser browser_;
private final Component browerUI_;
private MainFrame(String startURL, boolean useOSR, boolean isTransparent) {
CefApp.addAppHandler(new CefAppHandlerAdapter(null) {
@Override
public void stateHasChanged(org.cef.CefApp.CefAppState state) {
if (state == CefAppState.TERMINATED) System.exit(0);
}
});
CefSettings settings = new CefSettings();
settings.windowless_rendering_enabled = useOSR;
cefApp_ = CefApp.getInstance(settings);
client_ = cefApp_.createClient();
browser_ = client_.createBrowser(startURL, useOSR, isTransparent);
browerUI_ = browser_.getUIComponent();
address_ = new JTextField(startURL, 100);
address_.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
browser_.loadURL(address_.getText());
}
});
getContentPane().add(address_, BorderLayout.NORTH);
getContentPane().add(browerUI_, BorderLayout.CENTER);
pack();
setSize(800, 600);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
CefApp.getInstance().dispose();
dispose();
}
});
}
public static void main(String[] args) {
// Perform startup initialization on platforms that require it.
try {
String libpath = "<path to project>/jcefdemo/Release";
System.setProperty("java.library.path",libpath);
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
if (!CefApp.startup()) {
System.out.println("Startup initialization failed!");
return;
}
boolean useOsr = false;
new MainFrame("http://www.google.com", true, true);
System.out.println("Startup ");
} catch (Exception e) {
e.printStackTrace();
}
}
}
但出现错误
java.lang.reflect.InvocationTargetException
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1349)
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1324)
at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1348)
at org.cef.CefApp.<init>(CefApp.java:164)
at org.cef.CefApp.getInstance(CefApp.java:215)
at org.cef.CefApp.getInstance(CefApp.java:193)
at jcefdemo.JCefBrowser.<init>(JCefBrowser.java:34)
at jcefdemo.JCefBrowser.main(JCefBrowser.java:57)
Caused by: java.lang.UnsatisfiedLinkError: org.cef.CefApp.N_PreInitialize()Z
at org.cef.CefApp.N_PreInitialize(Native Method)
at org.cef.CefApp.access$0(CefApp.java:548)
at org.cef.CefApp$1.run(CefApp.java:157)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:301)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
initialize on Thread[AWT-EventQueue-0,6,main] with library path /Users/admin/Documents/test/jcefdemo/Release
java.lang.reflect.InvocationTargetException
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1349)
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1324)
at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1348)
at org.cef.CefApp.initialize(CefApp.java:418)
at org.cef.CefApp.createClient(CefApp.java:309)
at jcefdemo.JCefBrowser.<init>(JCefBrowser.java:35)
at jcefdemo.JCefBrowser.main(JCefBrowser.java:57)
Caused by: java.lang.UnsatisfiedLinkError: org.cef.CefApp.N_Initialize(Ljava/lang/String;Lorg/cef/handler/CefAppHandler;Lorg/cef/CefSettings;)Z
at org.cef.CefApp.N_Initialize(Native Method)
at org.cef.CefApp.access$5(CefApp.java:549)
at org.cef.CefApp$3.run(CefApp.java:411)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:301)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
java.lang.UnsatisfiedLinkError: org.cef.handler.CefClientHandler.N_CefClientHandler_CTOR()V
at org.cef.handler.CefClientHandler.N_CefClientHandler_CTOR(Native Method)
at org.cef.handler.CefClientHandler.<init>(CefClientHandler.java:39)
at org.cef.CefClient.<init>(CefClient.java:90)
at org.cef.CefApp.createClient(CefApp.java:314)
at jcefdemo.JCefBrowser.<init>(JCefBrowser.java:35)
at jcefdemo.JCefBrowser.main(JCefBrowser.java:57)