master
王兵 12 months ago
commit c20b95e439

8
.gitignore vendored

@ -0,0 +1,8 @@
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
*.iml
.idea/

@ -0,0 +1,187 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>starter-jcef</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<!--<packaging>war</packaging>--><!--需要打包成war时放开-->
<name>starter-jcef</name>
<description>project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.test.skip>true</maven.test.skip>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>
<repositories>
<!-- 将中央仓库地址指向阿里云聚合仓库,提高下载速度 -->
<repository>
<id>central</id>
<name>Central Repository</name>
<layout>default</layout>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
<pluginRepositories>
<!-- 将插件的仓库指向阿里云聚合仓库解决低版本maven下载插件异常或提高下载速度 -->
<pluginRepository>
<id>central</id>
<name>Central Repository</name>
<url>https://maven.aliyun.com/repository/public</url>
<layout>default</layout>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>me.friwi</groupId>
<artifactId>jcefmaven</artifactId>
<version>110.0.25.1</version>
</dependency>
<dependency>
<groupId>me.friwi</groupId>
<artifactId>jcef-natives-windows-amd64</artifactId>
<version>jcef-87476e9+cef-110.0.25+g75b1c96+chromium-110.0.5481.78</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>me.friwi</groupId>-->
<!-- <artifactId>jcef-natives-windows-arm64</artifactId>-->
<!-- <version>jcef-87476e9+cef-110.0.25+g75b1c96+chromium-110.0.5481.78</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>me.friwi</groupId>-->
<!-- <artifactId>jcef-natives-linux-amd64</artifactId>-->
<!-- <version>jcef-87476e9+cef-110.0.25+g75b1c96+chromium-110.0.5481.78</version>-->
<!-- </dependency>-->
<!-- java注册全局热键 -->
<dependency>
<groupId>com.melloware</groupId>
<artifactId>jintellitype</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 依赖管理器 -->
<!-- 管理器中依赖都会有默认的版本号在pom中引用时即可省略<version>标签 -->
<!-- 注:当需要非默认版本或本地环境导致的无法继承管理器中版本时,此时可以使用<version>显示指定依赖版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<!-- 项目名称 -->
<finalName>${artifactId}-${version}</finalName>
<!-- 默认的主代码目录 -->
<sourceDirectory>src/main/java</sourceDirectory>
<!-- 默认的测试代码目录 -->
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<!-- 包含java下的xml文件 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*Mapper.xml</include>
</includes>
</resource>
<!-- 包含lib中所有jar包 -->
<resource>
<directory>${basedir}/src/main/resources/lib</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>*.jar</include>
</includes>
</resource>
<!-- 启动bat -->
<resource>
<directory>${basedir}/src/main/resources/部署文档</directory>
<includes>
<include>*.bat</include>
<include>*.sh</include>
</includes>
<targetPath>${basedir}/target/部署文档</targetPath>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>${project.basedir}/src/main/resources/lib</directory>
<targetPath>WEB-INF/lib</targetPath>
<includes>
<include>*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,21 @@
package com.example.jcef;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
application.run(args);
}
}

@ -0,0 +1,53 @@
package com.example.jcef;
import me.friwi.jcefmaven.CefInitializationException;
import me.friwi.jcefmaven.UnsupportedPlatformException;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws InterruptedException, UnsupportedPlatformException, CefInitializationException, IOException {
WebClient webClient = new WebClient();
// 焦点事件监听
webClient.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("获得焦点事件");
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("丢失焦点事件");
}
});
// 添加一个鼠标点击监听
webClient.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标点击事件");
}
});
// 添加一个鼠标点击监听
webClient.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标点击事件");
}
});
// 调用脚本
webClient.executeJavaScript("console.log('java 调用 JavaScript')");
// 打开地址
webClient.loadUrl("D:\\wbProgram\\nginx-1.23.0\\html\\index.html");
// webClient.loadUrl("http://10.10.10.23:8082/#/index?token=fd290104-1568-4c65-87eb-14aeb95aee59");
}
}

@ -0,0 +1,58 @@
package com.example.jcef;
public enum KeyEnum {
F1(112),
F2(113),
F3(114),
F4(115),
F5(116),
F6(117),
F7(118),
F8(119),
F9(120),
F10(121),
F11(122),
F12(123),
ESC(27),
TAB(9),
CAPSLOCK(20),
SHIFT(16),
CTRL(17),
START_LEFT(91),
START_RIGHT(92),
CONTEXT_MENU(93),
ALT(18),
SPACE(32),
CARRIAGE_RETURN(13),
LINE_FEED(10),
BACK_SLASH(220),
BACK_SPACE(8),
INSERT(45),
DEL(46),
HOME(36),
END(35),
PAGE_UP(33),
PAGE_DOWN(34),
PRINT_SCREEN(44),
SCR_LK(145),
PAUSE(19),
LEFT_ARROW_KEY(37),
UP_ARROW_KEY(38),
RIGHT_ARROW_KEY(39),
DOWN_ARROW_KEY(40),
MOD_ALT(1),
MOD_CONTROL(2),
MOD_SHIFT(4),
MOD_WIN(8);
private int value;
KeyEnum(int value) {
this.value = value;
}
public int value() {
return value;
}
}

@ -0,0 +1,203 @@
package com.example.jcef;
import com.melloware.jintellitype.HotkeyListener;
import com.melloware.jintellitype.JIntellitype;
import me.friwi.jcefmaven.CefAppBuilder;
import me.friwi.jcefmaven.CefBuildInfo;
import me.friwi.jcefmaven.CefInitializationException;
import me.friwi.jcefmaven.MavenCefAppHandlerAdapter;
import me.friwi.jcefmaven.UnsupportedPlatformException;
import org.cef.CefApp;
import org.cef.CefClient;
import org.cef.browser.CefBrowser;
import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusListener;
import java.awt.event.KeyListener;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
public class WebClient extends JFrame {
// 退出
private final int KEY_MARK_ESC = 1;
// 最小化
private final int KEY_MARK_SWITCH = 2;
// 刷新
private final int KEY_MARK_RELOAD = 3;
// 强制刷新
private final int KEY_MARK_RELOAD_FORCE = 4;
private CefClient cefClient;
private CefBrowser cefBrowser;
private final HotkeyListener hotkeyListener = new HotkeyListener() {
@Override
public void onHotKey(int i) {
switch (i) {
case KEY_MARK_ESC: {
System.out.println("log: esc");
JIntellitype.getInstance().unregisterHotKey(KEY_MARK_ESC);
JIntellitype.getInstance().removeHotKeyListener(hotkeyListener);
close();
}
break;
case KEY_MARK_SWITCH: {
System.out.println("log: switch");
if (getExtendedState() == Frame.NORMAL) {
removeNotify();
setUndecorated(true);
setExtendedState(JFrame.MAXIMIZED_BOTH);
} else {
setExtendedState(Frame.NORMAL);
removeNotify();
setUndecorated(false);
}
setVisible(true);
}
break;
case KEY_MARK_RELOAD: {
System.out.println("log: reload");
reload();
}
break;
case KEY_MARK_RELOAD_FORCE: {
System.out.println("log: reloadForce");
reloadForce();
}
break;
}
}
};
public WebClient() throws HeadlessException, InterruptedException, UnsupportedPlatformException, CefInitializationException, IOException {
super();
initCef(new String[]{});
initClient(new String[]{});
}
private void initClient(String[] args) {
setTitle("WebClient");
getContentPane().add(cefBrowser.getUIComponent(), BorderLayout.CENTER);
setSize(800, 600);//初始大小
setLocation(0, 0);//位置
// 设置为全屏模式
setExtendedState(JFrame.MAXIMIZED_BOTH);
setUndecorated(true);
setAlwaysOnTop(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// 关闭应用时要释放资源
CefApp.getInstance().dispose();
dispose();
System.exit(0);//0正常退出1非正常退出
}
});
// 添加热键
JIntellitype.getInstance().registerHotKey(KEY_MARK_ESC, 0, KeyEnum.ESC.value());
JIntellitype.getInstance().registerHotKey(KEY_MARK_SWITCH, 0, KeyEnum.F11.value());
JIntellitype.getInstance().registerHotKey(KEY_MARK_RELOAD, 0, KeyEnum.F5.value());
JIntellitype.getInstance().registerHotKey(KEY_MARK_RELOAD_FORCE, KeyEnum.MOD_CONTROL.value(), KeyEnum.F5.value());
JIntellitype.getInstance().addHotKeyListener(hotkeyListener);
// 显示
setVisible(true);
}
/**
* CefBrowser
*
* @param args
*/
private void initCef(String[] args) throws InterruptedException, UnsupportedPlatformException, CefInitializationException, IOException {
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) {
// 关闭应用时退出jvm运行
if (state == CefApp.CefAppState.TERMINATED) System.exit(0);
}
});
// 设置cef运行参数这里为空
builder.addJcefArgs(args);
// 这边不设置,程序会自动解压
// 设置 cef chrome实例的目录关键若不设置他会默认从网络中下载国外网络可能下载不稳定导致失败
// 我的 cef chrome 位于项目的chrome目录下 C:\Users\Administrator\Desktop\project\java\demo-desktop\chrome
// builder.setInstallDir(new File(System.getProperty("user.dir") + File.separator + "chrome"));
// 由于是手动设置cef的chrome我们要跳过ins检查防止版本不一致导致从镜像站下载
// builder.setSkipInstallation(true);
// 全局的 CefApp 每个程序只能有一个,线程安全
CefApp build = builder.build();
// 显示一些版本信息
CefBuildInfo buildInfo = CefBuildInfo.fromClasspath();
System.out.println(buildInfo);
CefApp.CefVersion cefVersion = build.getVersion();
System.out.println(cefVersion);
// 创建一个浏览器客户端实例
cefClient = build.createClient();
// 创建一个浏览器实例,设置访问 url https://www.baidu.com
cefBrowser = cefClient.createBrowser("about:blank", useOSR, true);
}
/**
*
*
* @param url
* @throws InterruptedException
*/
public void loadUrl(String url) throws InterruptedException {
// 必须延迟,否则可能因为切换太快无法加载成功
Thread.sleep(300);
cefBrowser.loadURL(url);
}
/**
*
*/
public void reload() {
cefBrowser.reload();
}
/**
*
*/
public void reloadForce() {
cefBrowser.reloadIgnoreCache();
}
public void addFocusListener(FocusListener listener) {
cefBrowser.getUIComponent().addFocusListener(listener);
}
public void addMouseListener(MouseListener listener) {
cefBrowser.getUIComponent().addMouseListener(listener);
}
public void addKeyListener(KeyListener listener) {
cefBrowser.getUIComponent().addKeyListener(listener);
}
public void executeJavaScript(String javascript) {
cefBrowser.executeJavaScript(javascript, null, 1);
}
public void close() {
// 关闭应用时要释放资源
CefApp.getInstance().dispose();
dispose();
System.exit(0);
}
}
Loading…
Cancel
Save

Powered by TurnKey Linux.