加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

当用户点击关闭窗口时,如何将java应用程序放在Systemtray中

发布时间:2020-12-14 19:18:57 所属栏目:Java 来源:网络整理
导读:我从here看到如何使用托盘.所以我用这种方式使用它: private void checkTray() throws IOException { if (SystemTray.isSupported()) { System.out.println("system tray supported"); tray = SystemTray.getSystemTray(); Image image = ImageIO.read(new

我从here看到如何使用托盘.所以我用这种方式使用它:

private void checkTray() throws IOException {
    if (SystemTray.isSupported()) {
        System.out.println("system tray supported");
        tray = SystemTray.getSystemTray();
        Image image = ImageIO.read(new FileInputStream(new File("logo.png")));
        ActionListener exitListener = new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                System.out.println("Exiting....");
                System.exit(0);
            }
        };
        PopupMenu popup = new PopupMenu();
        MenuItem defaultItem = new MenuItem("Exit");
        defaultItem.addActionListener(exitListener);
        popup.add(defaultItem);
        defaultItem = new MenuItem("Open");
        defaultItem.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                setVisible(true);
                setExtendedState(JFrame.NORMAL);
            }
        });
        popup.add(defaultItem);
        trayIcon = new TrayIcon(image,"SystemTray Demo",popup);
        trayIcon.setImageAutoSize(true);
    }
    addWindowStateListener(new WindowStateListener() {

        public void windowStateChanged(WindowEvent e) {
            if (e.getNewState() == ICONIFIED) {
                try {
                    tray.add(trayIcon);
                    setVisible(false);
                    System.out.println("added to SystemTray");
                } catch (AWTException ex) {
                    System.out.println("unable to add to tray");
                }
            }
            if(e.getNewState() == WindowEvent.WINDOW_CLOSING){
               try {
                    tray.add(trayIcon);
                    setVisible(false);
                    System.out.println("added to SystemTray");
                } catch (AWTException ex) {
                    System.out.println("unable to add to system tray");
                }
            }
            if (e.getNewState() == 7) {
                try {
                    tray.add(trayIcon);
                    setVisible(false);
                    System.out.println("added to SystemTray");
                } catch (AWTException ex) {
                    System.out.println("unable to add to system tray");
                }
            }
            if (e.getNewState() == MAXIMIZED_BOTH) {
                tray.remove(trayIcon);
                setVisible(true);
                System.out.println("Tray icon removed");
            }
            if (e.getNewState() == NORMAL) {
                tray.remove(trayIcon);
                setVisible(true);
                System.out.println("Tray icon removed");
            }
        }
    });
}

并在构造函数中:

this.setDefaultCloSEOperation(JFrame.ICONIFIED);

当我点击关闭窗口时,我的应用程序没有进入系统尝试,但它自行关闭.我怎么解决呢?有人能帮我吗?

最佳答案
我解决了这个问题:

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent windowEvent) {
    setExtendedState(JFrame.ICONIFIED); 
    }
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读