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启动操作可以看我另一博客:
结束