5

i've seen from here how to use tray. So i use it in this way:

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");
            }
        }
    });
}

and in constructor :

this.setDefaultCloseOperation(JFrame.ICONIFIED);

When i click on close windows, my application doesn't go to the system try, but it closes itself. How can i solve it? can someone help me?

Community
  • 1
  • 1
Jayyrus
  • 12,961
  • 41
  • 132
  • 214
  • Since when `JFrame.ICONIFIED` becomes a value for [setDefaultCloseOperation()](http://docs.oracle.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation(int) ? WindowConstants http://docs.oracle.com/javase/6/docs/api/javax/swing/WindowConstants.html – ecle Apr 01 '12 at 12:09
  • so i have to use Nothing_on_close? – Jayyrus Apr 01 '12 at 12:10
  • Yes, since you want to `setVisible(true)` to make the frame visible again. – ecle Apr 01 '12 at 12:12
  • Yes, as you have `Exiting...` popup menu option in the system tray to exit the whole application using System.exit(0) – ecle Apr 01 '12 at 12:18
  • If you want to have the minimize window effect, use `frame.setState ( Frame.ICONIFIED );` – ecle Apr 01 '12 at 12:20
  • using DO_NOTHING_ON_CLOSE, with my code, when i click close button, nothing happens – Jayyrus Apr 01 '12 at 12:50
  • 1
    It is obvious DO_NOTHING_ON_CLOSE on window close operation will do nothing ;) – ecle Apr 01 '12 at 13:17

1 Answers1

4

i solve adding this:

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent windowEvent) {
    setExtendedState(JFrame.ICONIFIED); 
    }
});
Jayyrus
  • 12,961
  • 41
  • 132
  • 214