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开发了本地使用插件时,并且在启动时隐藏命令行窗口启动,程序关闭需要在任务管理器中关闭,较复杂

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


可能遇到的问题:

托盘的中文乱码

  • Eclipse中

右键项目->Run AS ->Run Configurations ->Arguments->VM arguments

中添加

-Dfile.encoding=gbk

  • IDEA中
    项目启动配置中添加
-Dfile.encoding=GB18030

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

springboot项目打包jar 并打包为exe启动


结束

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿似锦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值