最小化到托盘

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.InputStream;

public class TrayIconFrame extends JFrame {

  public TrayIconFrame(String title) {
    super(title);
    addTray();
  }

  private void addTray() {
    String fileName = "0.gif";
    InputStream is = getClass().getClassLoader().getResourceAsStream(fileName);
    if (is == null) {
      System.out.println("找不到图标文件 => " + fileName);
      return;
    }
    //获得系统托盘的实例
    try {
      SystemTray systemTray = SystemTray.getSystemTray();
      TrayIcon trayIcon = new TrayIcon(ImageIO.read(is));
      systemTray.add(trayIcon);
      this.addWindowListener(new WindowAdapter() {
        public void windowIconified(WindowEvent e) {
          // 最小化是隐藏窗口
          dispose();
        }
      });
      trayIcon.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
          if (e.getClickCount() == 2) {
            // 双击托盘窗口再现
            setExtendedState(Frame.NORMAL);
          }
          setVisible(true);
        }
      });
    } catch (IOException | AWTException e) {
      e.printStackTrace();
    }

  }

  public static void main(String args[]) {
    TrayIconFrame frame = new TrayIconFrame("托盘测试");
    frame.setPreferredSize(new Dimension(600, 480));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }
}

image-1656574895573