使用 Java 在 Eclipse 中进行 CEF 开发
CEF development in Eclipse with Java
我正在尝试为 Java 应用程序开发浏览器,我发现 JCEF. I made this guide 没有任何错误。现在我想尝试同样构建的简单示例 "MainFrame.Java"。
我在 eclipse 中创建了一个项目,将 jar 文件添加到库中并复制了 MainFrame 文件。
如果我运行它,我得到这个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jcef in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.cef.CefApp.<init>(CefApp.java:157)
at org.cef.CefApp.getInstance(CefApp.java:246)
at org.cef.CefApp.getInstance(CefApp.java:233)
at test.MainFrame.<init>(MainFrame.java:71)
at test.MainFrame.main(MainFrame.java:154)
我也尝试过此Question and the link in the comment. But if I download the file in the first step中描述的步骤我没有描述的文件或路径。
有人知道我该怎么做吗 运行 还是我做的完全错了?
MainFrame文件的代码:
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_;
/**
* To display a simple browser window, it suffices completely to create an
* instance of the class CefBrowser and to assign its UI component to your
* application (e.g. to your content pane). But to be more verbose, this
* CTOR keeps an instance of each object on the way to the browser UI.
*/
private MainFrame(String startURL, boolean useOSR, boolean isTransparent) {
CefApp.addAppHandler(new CefAppHandlerAdapter(null) {
@Override
public void stateHasChanged(org.cef.CefApp.CefAppState state) {
// Shutdown the app if the native CEF part is terminated
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) {
new MainFrame("http://www.google.com", OS.isLinux(), false);
}
}
我成功了。我的问题是我没有正确构建二进制文件
我正在尝试为 Java 应用程序开发浏览器,我发现 JCEF. I made this guide 没有任何错误。现在我想尝试同样构建的简单示例 "MainFrame.Java"。 我在 eclipse 中创建了一个项目,将 jar 文件添加到库中并复制了 MainFrame 文件。
如果我运行它,我得到这个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jcef in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.cef.CefApp.<init>(CefApp.java:157)
at org.cef.CefApp.getInstance(CefApp.java:246)
at org.cef.CefApp.getInstance(CefApp.java:233)
at test.MainFrame.<init>(MainFrame.java:71)
at test.MainFrame.main(MainFrame.java:154)
我也尝试过此Question and the link in the comment. But if I download the file in the first step中描述的步骤我没有描述的文件或路径。
有人知道我该怎么做吗 运行 还是我做的完全错了?
MainFrame文件的代码:
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_;
/**
* To display a simple browser window, it suffices completely to create an
* instance of the class CefBrowser and to assign its UI component to your
* application (e.g. to your content pane). But to be more verbose, this
* CTOR keeps an instance of each object on the way to the browser UI.
*/
private MainFrame(String startURL, boolean useOSR, boolean isTransparent) {
CefApp.addAppHandler(new CefAppHandlerAdapter(null) {
@Override
public void stateHasChanged(org.cef.CefApp.CefAppState state) {
// Shutdown the app if the native CEF part is terminated
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) {
new MainFrame("http://www.google.com", OS.isLinux(), false);
}
}
我成功了。我的问题是我没有正确构建二进制文件