springboot启动创建系统托盘及功能


springboot启动创建系统托盘及功能

修改启动类

添加构造函数:

    public TjtoolApplication() {
        initUI();
    }

    private void initUI() {
        if (SystemTray.isSupported()) {// 判断系统是否托盘
            TrayIcon icon = new TrayIcon(Toolkit.getDefaultToolkit()
                    .getImage(TjtoolApplication.class.getClassLoader().getResource("main.jpg")));// 创建一个托盘图标对象
            icon.setToolTip("爬虫服务已开启");
            icon.setImageAutoSize(true);
            PopupMenu menu = new PopupMenu();// 创建弹出菜单
            MenuItem item1 = new MenuItem("打开"); // 添加一个用于打开的按钮
            item1.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        Runtime.getRuntime().exec("cmd /c start http://localhost:8080/");
                    } catch (IOException e2) {
                        e2.printStackTrace();
                    }
                }
            });
            menu.add(item1);// 添加弹出菜单到托盘图标
            MenuItem item = new MenuItem("退出"); // 添加一个用于退出的按钮
            item.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
                }
            });
            menu.add(item);// 添加弹出菜单到托盘图标
            icon.setPopupMenu(menu);
            SystemTray tray = SystemTray.getSystemTray();// 获取系统托盘
            try {
                tray.add(icon);
            } catch (AWTException e1) {
                e1.printStackTrace();
            } // 将托盘图表添加到系统托盘
            icon.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent evt) {
                    if (evt.getClickCount() == 2) {// 处理鼠标双击
                        try {
                            Runtime.getRuntime().exec("cmd /c start http://localhost:8080/");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    super.mouseClicked(evt);
                }
            });
        }
    }

其中具体功能菜单可根据自己需求进行修改完善

修改启动函数:

public static void main(String[] args) {

        ConfigurableApplicationContext ctx = new SpringApplicationBuilder(TjtoolApplication.class).headless(false)
                .run(args);
        EventQueue.invokeLater(() -> {
            ctx.getBean(TjtoolApplication.class);
        });
    }

全量代码:

package com.tool;

import java.awt.AWTException;
import java.awt.EventQueue;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class TjtoolApplication {

    public static void main(String[] args) {

        ConfigurableApplicationContext ctx = new SpringApplicationBuilder(TjtoolApplication.class).headless(false)
                .run(args);
        EventQueue.invokeLater(() -> {
            ctx.getBean(TjtoolApplication.class);
        });
        // 启动打开默认浏览器访问
        try {
            Runtime.getRuntime().exec("cmd /c start http://localhost:8080/");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public TjtoolApplication() {
        initUI();
    }

    private void initUI() {
        if (SystemTray.isSupported()) {// 判断系统是否托盘
            TrayIcon icon = new TrayIcon(Toolkit.getDefaultToolkit()
                    .getImage(TjtoolApplication.class.getClassLoader().getResource("main.jpg")));// 创建一个托盘图标对象
            icon.setToolTip("爬虫服务已开启");
            icon.setImageAutoSize(true);
            PopupMenu menu = new PopupMenu();// 创建弹出菜单
            MenuItem item1 = new MenuItem("打开"); // 添加一个用于打开的按钮
            item1.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        Runtime.getRuntime().exec("cmd /c start http://localhost:8080/");
                    } catch (IOException e2) {
                        e2.printStackTrace();
                    }
                }
            });
            menu.add(item1);// 添加弹出菜单到托盘图标
            MenuItem item = new MenuItem("退出"); // 添加一个用于退出的按钮
            item.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
                }
            });
            menu.add(item);// 添加弹出菜单到托盘图标
            icon.setPopupMenu(menu);
            SystemTray tray = SystemTray.getSystemTray();// 获取系统托盘
            try {
                tray.add(icon);
            } catch (AWTException e1) {
                e1.printStackTrace();
            } // 将托盘图表添加到系统托盘
            icon.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent evt) {
                    if (evt.getClickCount() == 2) {// 处理鼠标双击
                        try {
                            Runtime.getRuntime().exec("cmd /c start http://localhost:8080/");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    super.mouseClicked(evt);
                }
            });
        }
    }
}

其中main.jpg 存放位置:

该功能用途: 

在项目启动时,会自动在系统右下角创建系统托盘图标;

当我们使用springboot+vue开发了本地使用插件时,并且在启动时隐藏命令行窗口启动,这时用户想关联程序需要在进程中关闭,较麻烦

可以使用这种方式,在系统托盘中添加图标,并携带退出功能

springboot打包jar转exe启动操作可以看我另一博客:


结束