2017-08-16 31 views
0

何らかの理由で、アプリケーションのウィンドウを閉じて終了してもアプリケーションが処理を続行するプロセスがあります。私が説明していないものはありますか?私のアプリは定期的にシステムトレイ通知を生成しますが、これらは終了後も継続します。これを停止する唯一の方法は、タスクマネージャでjava.exeプロセスを見つけることです。私が見落としているものはありますか?終了時にJavaFXアプリケーションのタスクマネージャプロセスが終了しない理由

public class TrayNotification { 

    public static void execute(String firstName, String incidentNumber, String requestId, TableView tabTable) throws AWTException, MalformedURLException { 
     if (SystemTray.isSupported()) { 
      TrayNotification trayNotification = new TrayNotification(); 
      trayNotification.displayTray(firstName, incidentNumber, requestId, tabTable); 
     } 
    } 

    private void displayTray(String firstName, String incidentNumber, String requestId, TableView tabTable) throws AWTException, MalformedURLException { 
     // Obtain a single instance of SystemTray 
     SystemTray tray = SystemTray.getSystemTray(); 

     // Set TrayIcon values 
     Image image = Toolkit.getDefaultToolkit().createImage(getClass().getResource("/images/tray-icon.png")); 
     final TrayIcon trayIcon = new TrayIcon(image, "Remedy React Notification"); 
     trayIcon.setImageAutoSize(true); 
     trayIcon.setToolTip(incidentNumber); 

     // Add TrayIcon to SystemTray instance if possible 
     try { 
      tray.add(trayIcon); 
     } catch (AWTException e) { 
      // System.out.println("Notification could not be added."); 
     } 

     trayIcon.addActionListener(e -> { 
      Parent root = null; 
      try { 
       root = FXMLLoader.load(getClass().getResource("/fxml/scene.fxml")); 
       root.requestLayout(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
      System.out.println("Test"); 
     }); 

     // Display TrayIcon 
      trayIcon.displayMessage("Hey, " + firstName, "You are now tracking " + incidentNumber + " !", TrayIcon.MessageType.INFO); 

    } 

} 
+1

ほとんどの原因は、非デーモンスレッドの作成です。明示的にまたはエグゼキュータを介して、プログラム内に新しいスレッドを作成していますか? [MCVE]を提供することを検討してください。 – Itai

+0

[こちら](https://stackoverflow.com/q/2213340/230513)[こちら](http://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html) #jls-12.8)。 – trashgod

答えて

0

「終了」ボタンをクリックしたときにSystem.exit(0)を使用しています。

+0

私の問題は、ウィンドウの「終了」ボタンを指定するハンドラの種類がないことです。私は終了メニュー項目を持っていないし、1つを実装することはありません...私はこの記事の行に沿って何かが必要だと思う:https://stackoverflow.com/questions/26619566/javafx-stage-close-handler – santafebound

+1

@santafebound - 「終了」オプションがない場合は、「終了」をどのように定義しますか?あなたは「これらは終了後も継続する」と言っています。「終了」の時点で、System.exit(0)を呼び出すと、JVMインスタンスが終了するはずです。 – Itai

+0

アプリケーションを終了するには、左上隅の[X]を使用していますか? –

関連する問題