java程序加到系统托盘的方法

  1 package swingtest;
  2 
  3 
  4 import javax.swing.*;
  5 import java.awt.*;
  6 import java.awt.event.ActionEvent;
  7 import java.awt.event.ActionListener;
  8 import java.awt.event.MouseAdapter;
  9 import java.awt.event.MouseEvent;
 10 import java.io.UnsupportedEncodingException;
 11 import java.net.URL;
 12 import java.util.Random;
 13 
 14 
 15 public class MainFrame extends JFrame implements ActionListener {
 16 
 17     private static final long serialVersionUID = -7078030311369039390L;
 18     private JMenu menu;
 19     private JMenuBar jmenuBar;
 20     private String[] jmItemName = {"置于托盘", "系统退出"};
 21 
 22     private MainFrame() throws UnsupportedEncodingException {
 23         super("电话薄");
 24         init();
 25         this.setSize(500, 400);
 26         this.setJMenuBar(jmenuBar);
 27         this.setLocationRelativeTo(null);
 28 
 29         JButton jbutton = new JButton("test");
 30         add(jbutton);
 31 
 32 
 33         systemTray(jbutton);    //系统托盘
 34     }
 35 
 36     /**
 37      * 初始化界面
 38      */
 39     private void init() {
 40         menu = new JMenu("系统窗体");
 41         for (String s : jmItemName) {
 42             JMenuItem menuItem = new JMenuItem(s);
 43             menuItem.addActionListener(this);
 44             menu.add(menuItem);
 45         }
 46         this.jmenuBar = new JMenuBar();
 47         this.jmenuBar.add(menu);
 48     }
 49 
 50     @Override
 51     public void actionPerformed(ActionEvent e) {
 52         String actions = e.getActionCommand();
 53         if ("置于托盘".equals(actions)) {
 54             this.setVisible(false);
 55         }
 56         if ("系统退出".equals(actions)) {
 57             System.exit(0);
 58         }
 59 
 60     }
 61 
 62     /**
 63      * 系统托盘图标处理.
 64      *
 65      * @param jbutton
 66      */
 67     private void systemTray(JButton jbutton) throws UnsupportedEncodingException {
 68         if (SystemTray.isSupported()) {    //判断系统是否支持托盘功能.
 69 //            URL resource = this.getClass().getResource("car.jpg");    //获得图片路径
 70 
 71             URL resource = getClass().getClassLoader().getResource("car.jpg");
 72 //            File targetFile = new File("files/8k.wav");
 73 
 74 //            ClassPathResource classPathResource = new ClassPathResource("static/something.txt");
 75 //
 76 //            InputStream inputStream = classPathResource.getInputStream();
 77             ImageIcon icon = new ImageIcon(resource); //创建图片对象
 78             JPopupMenu popupMenu = new JPopupMenu(); //创建弹出菜单对象
 79             JMenuItem itemExit = new JMenuItem("退出系统");    //创建弹出菜单中的退出项
 80             JMenuItem itemShow = new JMenuItem("显示窗体"); //创建弹出菜单中的显示主窗体项.
 81 
 82 
 83             popupMenu.add(itemExit);
 84             popupMenu.add(itemShow);
 85             TrayIcon trayIcon = new TrayIcon(icon.getImage(), "电话薄系统");
 86             SystemTray sysTray = SystemTray.getSystemTray();
 87 
 88             try {
 89                 sysTray.add(trayIcon);
 90             } catch (AWTException ignored) {
 91             }
 92             trayIcon.addMouseListener(new MouseAdapter() {
 93                 @Override
 94                 public void mouseReleased(MouseEvent e) {
 95                     if (e.isPopupTrigger()) {
 96                         popupMenu.setLocation(e.getX(), e.getY());
 97                         popupMenu.setInvoker(popupMenu);
 98                         popupMenu.setVisible(true);
 99                     }
100                 }
101             });
102             //给窗体最小化添加事件监听.
103             itemShow.addActionListener(e -> {
104                 setVisible(true);
105 
106             });
107             //给退出像添加事件监听
108             itemExit.addActionListener(e -> {
109 //                System.exit(0);
110                 sysTray.remove(trayIcon);
111                 dispose();
112             });
113             int count = 0;
114             jbutton.addActionListener(e -> {
115                 TrayIcon trayIcon4 = new TrayIcon(icon.getImage(), "电话薄系统");
116                 try {
117                     sysTray.add(trayIcon4);
118                 } catch (AWTException ex) {
119                     ex.printStackTrace();
120                 }
121             });
122 
123         }
124     }
125 
126     /**
127      * 主方法
128      *
129      * @param args sdf
130      */
131     public static void main(String[] args) throws UnsupportedEncodingException {
132         new MainFrame().setVisible(true);
133     }
134 }
原文地址:https://www.cnblogs.com/yangxiaobo-blog/p/11664355.html