java利用chromium开发桌面客户端

发布时间 2023-10-09 17:06:06作者: 小小爬虫

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);
        }
    }
}