title: JavaFX app in System Tray
body: <p>I am Making a Simple App using JavaFX UI, The app simply just do that:</p>
  
  <ul>
  <li>has a systray icon, which when clicked shows a window, when clicked again hides it, on    rightclick shows a menu with 1 "exit" item</li>
  </ul>
  
  <p>I already Made the UI and put the App in the Sys Tray, but i can't show/hide it using Normal Actionlistener method, but i got this error:</p>
  
  <pre><code>Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0
  </code></pre>
  
  <p>here is the Code:</p>
  
  <pre><code>import java.awt.Image;
  import java.awt.MenuItem;
  import java.awt.PopupMenu;
  import java.awt.SystemTray;
  import java.awt.Toolkit;
  import java.awt.TrayIcon;
  import java.awt.event.ActionListener;
  
  
  import javafx.application.Application;
  import javafx.event.ActionEvent;
  import javafx.event.EventHandler;
  import javafx.scene.Scene;
  import javafx.scene.control.Button;
  import javafx.scene.layout.StackPane;
  import javafx.stage.Stage;
  
  public class Main extends Application{
      public static void main(String[] args) { 
          launch(args);       
      }
  
      @Override
      public void start(final Stage primaryStage) {
          primaryStage.setTitle("Hello World!");
          Button btn = new Button();
          btn.setText("Say 'Hello World'");
          btn.setOnAction(new EventHandler&lt;ActionEvent&gt;() {
  
              @Override
              public void handle(ActionEvent event) {
                  System.out.println("Hello World!");            }
          });
  
          StackPane root = new StackPane();
          root.getChildren().add(btn);
          primaryStage.setScene(new Scene(root, 300, 250));
          primaryStage.show();
  
          if (SystemTray.isSupported()) {         
              SystemTray tray = SystemTray.getSystemTray();
              Image image = Toolkit.getDefaultToolkit().getImage("Germany-politcal-map.jpg");
              PopupMenu popup = new PopupMenu();
              MenuItem item = new MenuItem("Exit");
  
              popup.add(item);
  
              TrayIcon trayIcon = new TrayIcon(image, "Amr_Trial", popup);
  
              ActionListener listener = new ActionListener() {                
                  @Override
                  public void actionPerformed(java.awt.event.ActionEvent arg0) {
                      // TODO Auto-generated method stub
                      System.exit(0);                 
                  }               
              };                       
  
              ActionListener listenerTray = new ActionListener() {                
                  @Override
                  public void actionPerformed(java.awt.event.ActionEvent arg0) {
                      // TODO Auto-generated method stub                  
                      primaryStage.hide();
                  }                   
              };            
  
              trayIcon.addActionListener(listenerTray);
              item.addActionListener(listener);
  
              try{
                tray.add(trayIcon);
              }catch (Exception e) {
                System.err.println("Can't add to tray");
              }
            } else {
              System.err.println("Tray unavailable");
            } 
          //
      }
  }
  </code></pre>