java內(nèi)嵌瀏覽器CEF-JAVA、jcef、java chrome
jcef是老牌cef的chrome內(nèi)嵌方案,可以進(jìn)行java-chrome-h5-桌面開發(fā),下面為最新版本(2023年9月22日10:33:07)
JCEF(Java Chromium Embedded Framework)是一個(gè)基于Google Chromium的Java庫,可以在Java應(yīng)用程序中嵌入和使用Chromium瀏覽器引擎。
轉(zhuǎn)自 https://lingkang.top/archives/java-nei-qian-liu-lan-qi-cef-java-jcef-javachrome
pom.xml
引入依賴
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>me.friwi</groupId>
<artifactId>jcefmaven</artifactId>
<version>110.0.25.1</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>tencent</id>
<name>tencent</name>
<layout>default</layout>
<url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>nexus</id>
<name>Nexus</name>
<layout>default</layout>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>aliyunmaven</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
上面的Maven依賴不會(huì)將chrome瀏覽器下載的,可以通過代碼或者手動(dòng)的方式下載cef的chrome。
方式一(推薦)
手動(dòng)方式,首先確認(rèn)你的運(yùn)行平臺
import java.util.Locale;
/**
* @author lingkang
* @created in 2023/9/22
**/
public class PlatformTest {
public static void main(String[] args) throws Exception{
System.out.println(EnumPlatform.getCurrentPlatform().getOs().name().toLowerCase(Locale.ENGLISH));
System.out.println(EnumPlatform.getCurrentPlatform().getIdentifier().split("-")[1]);
}
}
輸出
windows
amd64
那么去到阿里云Maven搜索:jcef-natives
https://developer.aliyun.com/mvn/search
再查找依賴的版本和平臺下載jar
點(diǎn)擊右邊的下載題標(biāo),獲取jar
用壓縮包軟件打開它
將里面的壓縮包復(fù)制出來:jcef-natives-windows-amd64-jcef-87476e9+cef-110.0.25+g75b1c96+chromium-110.0.5481.78.tar
將壓縮包內(nèi)容解壓到項(xiàng)目目錄中,這里我項(xiàng)目創(chuàng)建了一個(gè)叫chrome
的目錄:
編寫一個(gè)簡單demo
package top.lingkang;
import me.friwi.jcefmaven.CefAppBuilder;
import me.friwi.jcefmaven.CefBuildInfo;
import me.friwi.jcefmaven.MavenCefAppHandlerAdapter;
import org.cef.CefApp;
import org.cef.CefClient;
import org.cef.browser.CefBrowser;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
/**
* @author lingkang
* @created in 2023/9/22
**/
public class Demo01 {
public static void main(String[] args) throws Exception {
CefAppBuilder builder = new CefAppBuilder();
// window下不需要OSR
boolean useOSR = false;
builder.getCefSettings().windowless_rendering_enabled = useOSR;
builder.setAppHandler(new MavenCefAppHandlerAdapter() {
@Override
public void stateHasChanged(org.cef.CefApp.CefAppState state) {
// 關(guān)閉應(yīng)用時(shí)退出jvm運(yùn)行
if (state == CefApp.CefAppState.TERMINATED) System.exit(0);
}
});
// 設(shè)置cef運(yùn)行參數(shù),這里為空
builder.addJcefArgs(args);
// 設(shè)置 cef chrome實(shí)例的目錄,關(guān)鍵,若不設(shè)置他會(huì)默認(rèn)從網(wǎng)絡(luò)中下載,國外網(wǎng)絡(luò)可能下載不穩(wěn)定導(dǎo)致失敗
// 我的 cef chrome 位于項(xiàng)目的chrome目錄下 C:\Users\Administrator\Desktop\project\java\demo-desktop\chrome
builder.setInstallDir(new File(System.getProperty("user.dir") + File.separator + "chrome"));
// 由于是手動(dòng)設(shè)置cef的chrome,我們要跳過ins檢查,防止版本不一致導(dǎo)致從鏡像站下載
builder.setSkipInstallation(true);
// 全局的 CefApp 每個(gè)程序只能有一個(gè),線程安全
CefApp build = builder.build();
// 顯示一些版本信息
CefBuildInfo buildInfo = CefBuildInfo.fromClasspath();
System.out.println(buildInfo);
CefApp.CefVersion cefVersion = build.getVersion();
System.out.println(cefVersion);
// 創(chuàng)建一個(gè)瀏覽器客戶端實(shí)例
CefClient client = build.createClient();
boolean isTransparent = true;// 透明背景
// 創(chuàng)建一個(gè)瀏覽器實(shí)例,設(shè)置訪問 url https://www.baidu.com
CefBrowser browser = client.createBrowser("https://www.baidu.com", useOSR, isTransparent);
// 獲取UI組件
Component uiComponent = browser.getUIComponent();
// 獲得鍵盤焦點(diǎn)事件
uiComponent.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("獲得鍵盤焦點(diǎn)事件");
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("失去鍵盤焦點(diǎn)事件");
}
});
// 添加一個(gè)鼠標(biāo)點(diǎn)擊監(jiān)聽
uiComponent.addMouseListener(new MouseAdapter() {
int i = 0;
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(e);
if (i % 2 == 0) // 執(zhí)行JavaScript命令
browser.executeJavaScript("alert('鼠標(biāo)點(diǎn)擊')", null, 1);
i++;
}
});
// 創(chuàng)建 JFrame UI 用于放入chrome
JFrame main = new JFrame("lingkang");
main.getContentPane().add(uiComponent, BorderLayout.CENTER);
main.setSize(800, 600);//大小
main.setLocation(0, 0);//位置
main.setVisible(true);//顯示
main.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// 關(guān)閉應(yīng)用時(shí)要釋放資源
CefApp.getInstance().dispose();
main.dispose();
System.exit(0);//0正常退出,1非正常退出
}
});
}
}
方式二
基于方式一,刪除下面的代碼文章來源:http://www.zghlxwxcb.cn/news/detail-751783.html
// 設(shè)置 cef chrome實(shí)例的目錄,關(guān)鍵,若不設(shè)置他會(huì)默認(rèn)從網(wǎng)絡(luò)中下載,國外網(wǎng)絡(luò)可能下載不穩(wěn)定導(dǎo)致失敗
// 我的 cef chrome 位于項(xiàng)目的chrome目錄下 C:\Users\Administrator\Desktop\project\java\demo-desktop\chrome
// builder.setInstallDir(new File(System.getProperty("user.dir") + File.separator + "chrome"));
// 由于是手動(dòng)設(shè)置cef的chrome,我們要跳過ins檢查,防止版本不一致導(dǎo)致從鏡像站下載
// builder.setSkipInstallation(true);
它默認(rèn)會(huì)去下面的鏡像中下載文章來源地址http://www.zghlxwxcb.cn/news/detail-751783.html
// CefAppBuilder() 中的構(gòu)造參數(shù)
https://github.com/jcefmaven/jcefmaven/releases/download
https://repo.maven.apache.org/maven2/me/friwi
// 可自定義
builder.setMirrors();
到了這里,關(guān)于java內(nèi)嵌瀏覽器CEF-JAVA、jcef、java chrome的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!