https://blog.csdn.net/weixin_44480167/article/details/133170970
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 org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
@SpringBootApplication
public class JcefDemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = new SpringApplicationBuilder(JcefDemoApplication.class)
.headless(false).run(args);
createUI(context,args);
}
private static void createUI(ConfigurableApplicationContext context, String[] args) {
try {
CefAppBuilder builder = new CefAppBuilder();
builder.getCefSettings().windowless_rendering_enabled = false;
builder.setAppHandler(new MavenCefAppHandlerAdapter() {
@Override
public void stateHasChanged(org.cef.CefApp.CefAppState state) {
// 关闭应用时退出jvm运行
if (state == CefApp.CefAppState.TERMINATED) exit(context);
}
});
// 设置cef运行参数,这里为空
builder.addJcefArgs(args);
// 设置 cef chrome实例的目录,关键,若不设置他会默认从网络中下载,国外网络可能下载不稳定导致失败
builder.setInstallDir(new File(System.getProperty("user.dir") + File.separator + "jcef"));
// 由于是手动设置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 client = build.createClient();
// 创建一个浏览器实例,设置访问 url https://www.baidu.com
CefBrowser browser = client.createBrowser("https://www.baidu.com", false, true);
// 获取UI组件
java.awt.Component uiComponent = browser.getUIComponent();
// 创建 JFrame UI 用于放入chrome
JFrame main = new JFrame("jcef demo");
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) {
// 关闭应用时要释放资源
CefApp.getInstance().dispose();
main.dispose();
exit(context);
}
});
}catch (Exception e) {
e.printStackTrace();
exit(context);
}
}
private static void exit(ConfigurableApplicationContext context) {
if (context.isActive()) {
SpringApplication.exit(context);
System.exit(0);
}
}
}