JavaFX:关闭窗口后应用程序线程不会终止

时间:2014-09-25 17:16:40

标签: java javafx terminate

我正在尝试在关闭窗口时终止运行JavaFX应用程序的线程,而不关闭任何其他线程。这是我的应用程序类:

package testIt;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

import java.io.IOException;

public class MemoryVisualizerApp extends Application{


public static void main(String[] args) {
    launch(args);
}

//Setup the scene and launch with given properties
@Override
public void start(Stage primaryStage) throws IOException{
    Parent root = FXMLLoader.load(getClass().getResource("/MemoryVisualizer.fxml"));
    Scene scene = new Scene(root, 650, 340);
    //Set whether the screen should be re-sizable (possibly best size = default)
    primaryStage.setResizable(true);
    primaryStage.setMinHeight(300);
    primaryStage.setMinWidth(550);
    primaryStage.setTitle("MINT Performance");
    primaryStage.setScene(scene);
    scene.getStylesheets().add("testIt/MemoryVisualizer.css");
    primaryStage.show();
    primaryStage.show();
    primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() 
            {
                public void handle(WindowEvent e){
                    System.out.println("test");  
                    try {
                        stop();
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
            });
}

}

出于测试目的,这个应用程序是我启动程序时唯一运行的应用程序,所以当我关闭窗口时,整个程序应该终止。但是我仍然可以选择终止程序(我正在使用eclipse并且红色方块仍然是可点击的),这意味着该线程仍处于活动状态。

如何在关闭GUI窗口后终止此线程?

2 个答案:

答案 0 :(得分:0)

您可以使用 Platform.exit() 代替 stop()

 primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() 
  {
      public void handle(WindowEvent e){
          System.out.println("test");  
          try {
               Platform.exit();
          } 
          catch (Exception e1) {
               e1.printStackTrace();
          }
      }
   });

Take a look at the JavaFX Application life cycle

答案 1 :(得分:0)

尝试覆盖stop()方法:

@Override
public void stop(){
    System.exit(0);
}

这将导致应用程序停止在IDE中运行。