2013-08-26 92 views
0

我想在窗口最小化時將圖標添加到系統托盤,並在最大化時將其刪除,但我得到此異常並且無法解決它。在java中添加和刪除trayicon?

線程「AWT-EventQueue-0」中的異常java.lang.IllegalArgumentException:添加已添加的TrayIcon。

else if (e.getSource() == MinimizeButton) 
     setState(IslamicProject.ICONIFIED); 
    {  // Test to see if supports Tray 
     if (SystemTray.isSupported()) 
     { 
      //Create Tray 
      tray = SystemTray.getSystemTray(); 

      Image image = Toolkit.getDefaultToolkit().getImage("D:/Art Gallary 2008/Islamic/forsan_03.gif"); 
      //create menu Items 
      PopupMenu popup = new PopupMenu(); 
      MenuItem ExitMenu = new MenuItem("Exit"); 
      MenuItem OpenMenu = new MenuItem("Open"); 
      trayIcon = new TrayIcon(image, "The Tip Text", popup); 

      //add the listeners of menu items 
      ListenForExitMenu EXMU = new ListenForExitMenu(); 
      ListenForOpenMenu OPMU = new ListenForOpenMenu(); 
      ExitMenu.addActionListener(EXMU); 
      OpenMenu.addActionListener(OPMU); 
      //adds the listener so that when icon in tray is clicked it opens up 
      //trayIcon.addActionListener(OPMU); 
      mouselis l = new mouselis(); 
      trayIcon.addMouseListener(l); 
       // the window state listener tests to see the state of the frame 
      addWindowStateListener(new WindowStateListener() { 
       public void windowStateChanged(WindowEvent e) { 
        if (e.getNewState() == ICONIFIED) 
        { 
         try 
         { 
          tray.add(trayIcon); 
          setVisible(false); 
         } catch (AWTException ex) 
         { 
          System.err.println("Can't add to tray"); 
         } 
        } 
        if (e.getNewState() == NORMAL) 
        { 
         tray.remove(trayIcon); 
         setVisible(true); 
        } 
       } 

      }); 
      // adding the open and exit to menu 
      popup.add(OpenMenu); 
      popup.add(ExitMenu); 
     } 
     else 
     { 
      System.err.println("Tray unavailable"); 
     } 
    } 

回答

1

下面是一個例子:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JFrame; 
import javax.swing.UIManager; 

/** 
* 
* @author Mohammad Faisal 
* ermohammadfaisal.blogspot.com 
* facebook.com/m.faisal6621 
* 
*/ 

public class HideToSystemTray extends JFrame{ 
    TrayIcon trayIcon; 
    SystemTray tray; 
    HideToSystemTray(){ 
     super("SystemTray test"); 
     System.out.println("creating instance"); 
     try{ 
      System.out.println("setting look and feel"); 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     }catch(Exception e){ 
      System.out.println("Unable to set LookAndFeel"); 
     } 
     if(SystemTray.isSupported()){ 
      System.out.println("system tray supported"); 
      tray=SystemTray.getSystemTray(); 

      Image image=Toolkit.getDefaultToolkit().getImage("/media/faisal/DukeImg/Duke256.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); 
     }else{ 
      System.out.println("system tray not supported"); 
     } 
     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()==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"); 
       } 
      } 
     }); 
     setIconImage(Toolkit.getDefaultToolkit().getImage("Duke256.png")); 

     setVisible(true); 
     setSize(300, 200); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
    public static void main(String[] args){ 
     new HideToSystemTray(); 
    } 
} 
+0

什麼是錯我的代碼 –

+0

,請給我整個代碼FINDE您的錯誤或SSCCE – Khinsu

+0

http://pastebin.com/UT0XQEBh –