如何在JavaFX中获取舞台的关闭事件?

在JavaFX中,如果用户单击某个阶段的关闭按钮(X)(最右上角),我该如何获取该事件?

我希望我的应用程序在窗口关闭时打印调试消息。 ( System.out.println("Application Close by click to Close Button(X)")

 @Override public void start(Stage primaryStage) { StackPane root = new StackPane(); root.getChildren().add(btn); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.show(); // Any Event Handler //{ System.out.println("Application(primaryStage) Closed by click to Close Button(X)"); //} } 

我得到了这个问题的答案

 stage.setOnHiding(new EventHandler() { @Override public void handle(WindowEvent event) { Platform.runLater(new Runnable() { @Override public void run() { System.out.println("Application Closed by click to Close Button(X)"); System.exit(0); } }); } }); 

另一种实现相同效果的方法,但与启动应用程序的方式更加一致的是覆盖stop();

根据JavaFX文档,Application实例的生命周期如下:

无论何时启动应用程序,JavaFX运行时都会按顺序执行以下操作:

  1. 构造指定Application类的实例
  2. 调用init()方法
  3. 调用start(javafx.stage.Stage)方法
  4. 等待应用程序完成,当发生以下任一情况时会发生:
    • 应用程序调用Platform.exit()
    • 最后一个窗口已关闭,Platform上的implicitExit属性为true
  5. 调用stop()方法

因此,您只需覆盖stop()

 @Override public void stop(){ System.out.println("Stage is closing"); } 
 stage.setOnCloseRequest(new EventHandler() { public void handle(WindowEvent we) { System.out.println("Stage is closing"); } });