title: How to add MenuItem to Menu of a TrayIcon ,dynamically in java?
body: <p>I have a ChatServer application , and when ChatServer started a TrayIcon will display in the system tray , When i right click on that Trayicon there is a Menu called who's online , i want to add MenuItem to this menu when a client is connect chat server , the problem is how to add MenuItem dynamically? i have used
   <code>onlineMenu.add(next);</code></p>
  
  <p>My TrayIcon class is as below ,(not the whole code)</p>
  
  <pre><code>public class TrayIconDemo {
       private TrayIcon trayIcon ;
       private Menu onlineMenu = new Menu("Who's Online(?)");
  
       public void startUp() {
      /* Use an appropriate Look and Feel */
      try {
          UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
          //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
      } catch (UnsupportedLookAndFeelException ex) {
          ex.printStackTrace();
      } catch (IllegalAccessException ex) {
          ex.printStackTrace();
      } catch (InstantiationException ex) {
          ex.printStackTrace();
      } catch (ClassNotFoundException ex) {
          ex.printStackTrace();
      }
      /* Turn off metal's use of bold fonts */
      UIManager.put("swing.boldMetal", Boolean.FALSE);
      //Schedule a job for the event-dispatching thread:
      //adding TrayIcon.
      SwingUtilities.invokeLater(new Runnable() {
          public void run() {
              createAndShowGUI();
          }
      });
  }
  
  
  private void createAndShowGUI() {
      //Check the SystemTray support
      if (!SystemTray.isSupported()) {
          System.out.println("SystemTray is not supported");
          return;
      }
      final PopupMenu popup = new PopupMenu();
      trayIcon = new TrayIcon(createImage("images/bulb.gif", "tray icon"));
      final SystemTray tray = SystemTray.getSystemTray();
  
      // Create a popup menu components
      MenuItem aboutItem = new MenuItem("About");
      //CheckboxMenuItem cb1 = new CheckboxMenuItem("Set auto size");
      //CheckboxMenuItem cb2 = new CheckboxMenuItem("Set tooltip");
  
     // MenuItem errorItem = new MenuItem("Error");
     // MenuItem warningItem = new MenuItem("Warning");
      MenuItem infoItem = new MenuItem("Info");
     // MenuItem noneItem = new MenuItem("None");
      MenuItem exitItem = new MenuItem("Exit");
  
      //Add components to popup menu
      popup.add(aboutItem);
      popup.addSeparator();
     // popup.add(cb1);
     // popup.add(cb2);
      popup.addSeparator();
      popup.add(onlineMenu);
      //onlineMenu.add("Hi...");
      //displayMenu.add(errorItem);
      //displayMenu.add(warningItem);
      //displayMenu.add(infoItem);
      //displayMenu.add(noneItem);
      popup.add(exitItem);
  
      trayIcon.setPopupMenu(popup);
      trayIcon.setImageAutoSize(true);
      trayIcon.setToolTip("Chat Server "+serverIpAddress+"");
  
  
      try {
          tray.add(trayIcon);
      } catch (AWTException e) {
          System.out.println("TrayIcon could not be added.");
          return;
      }
      //Default Tray notification
      trayIcon.displayMessage("Server", "Server Started! server IP is "+serverIpAddress+"",
          TrayIcon.MessageType.NONE);
      trayIcon.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              JOptionPane.showMessageDialog(null,
                      "Chat Server Started and Running succesfully.");
          }
      });
  
      aboutItem.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              JOptionPane.showMessageDialog(null,
                      "Chat server version 1.01.Developed by Roshan.");
          }
      });
  
     /* cb1.addItemListener(new ItemListener() {
          public void itemStateChanged(ItemEvent e) {
              int cb1Id = e.getStateChange();
              if (cb1Id == ItemEvent.SELECTED){
                  trayIcon.setImageAutoSize(true);
              } else {
                  trayIcon.setImageAutoSize(false);
              }
          }
      });*/
  
      /*cb2.addItemListener(new ItemListener() {
          public void itemStateChanged(ItemEvent e) {
              int cb2Id = e.getStateChange();
              if (cb2Id == ItemEvent.SELECTED){
                  trayIcon.setToolTip("Chat Server");
              } else {
                  trayIcon.setToolTip(null);
              }
          }
      });*/
  
      ActionListener listener = new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              MenuItem item = (MenuItem)e.getSource();
              //TrayIcon.MessageType type = null;
              System.out.println(item.getLabel());
              if ("Error".equals(item.getLabel())) {
                  //type = TrayIcon.MessageType.ERROR;
                  trayIcon.displayMessage("Chat Server",
                          "This is an error message", TrayIcon.MessageType.ERROR);
  
              } else if ("Warning".equals(item.getLabel())) {
                  //type = TrayIcon.MessageType.WARNING;
                  trayIcon.displayMessage("Sun TrayIcon Demo",
                          "This is a warning message", TrayIcon.MessageType.WARNING);
  
              } else if ("Info".equals(item.getLabel())) {
                  //type = TrayIcon.MessageType.INFO;
                  trayIcon.displayMessage("Sun TrayIcon Demo",
                          "This is an info message", TrayIcon.MessageType.INFO);
  
              } else if ("None".equals(item.getLabel())) {
                  //type = TrayIcon.MessageType.NONE;
                  trayIcon.displayMessage("Sun TrayIcon Demo",
                          "This is an ordinary message", TrayIcon.MessageType.NONE);
              }
          }
      };
  
      //errorItem.addActionListener(listener);
      //warningItem.addActionListener(listener);
      infoItem.addActionListener(listener);
      //noneItem.addActionListener(listener);
  
  
      exitItem.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              tray.remove(trayIcon);
              System.exit(0);
          }
      });
  }
  </code></pre>
  
  <p>Now here i want to add a menuItem to the onlineMenu
  This method will call when the client is connect to the server</p>
  
  <pre><code>public void setClientIpName(String ipNameClient){//receiving ipNameClient veriable inside ip+com_name
    String[] token =ipNameClient.split("/"); //token[1]=ip , token[2]=computer name
    this.addClient(token[2]);//send name nad return treeset 
    if(!clients.isEmpty()){
      JOptionPane.showMessageDialog(null,clients.size()+"");
      Iterator iterator;
      iterator = clients.iterator(); 
      while (iterator.hasNext()){
      String next = iterator.next()+"";
           onlineMenu.add(next);
        }
  }
  }
  </code></pre>
  
  <p>but it want add any MenuItem to the onlineMenu , anyone can help? </p>