gpt4 book ai didi

JavaFX:阶段关闭处理程序

转载 作者:IT老高 更新时间:2023-10-28 20:41:08 24 4
gpt4 key购买 nike

我想在关闭我的 JavaFX 应用程序之前保存一个文件。

这就是我在 Main::start:

中设置处理程序的方式
primaryStage.setOnCloseRequest(event -> {
System.out.println("Stage is closing");
// Save file
});

当按下按钮时 Controller 调用 Stage::close:

@FXML
public void exitApplication(ActionEvent event) {
((Stage)rootPane.getScene().getWindow()).close();
}

如果我单击窗口边框上的红色 X 关闭窗口(正常方式),则会收到输出消息“Stage is closing”,这是所需的行为。

但是,当调用 Controller::exitApplication 时,应用程序会在不调用处理程序的情况下关闭(没有输出)。

如何让 Controller 使用我添加到 primaryStage 的处理程序?

最佳答案

如果您查看 life-cycle Application 类的:

The JavaFX runtime does the following, in order, whenever an application is launched:

  1. Constructs an instance of the specified Application class
  2. Calls the init() method
  3. Calls the start(javafx.stage.Stage) method
  4. Waits for the application to finish, which happens when either of the following occur:
    • the application calls Platform.exit()
    • the last window has been closed and the implicitExit attribute on Platform is true
  5. Calls the stop() method

这意味着您可以在 Controller 上调用 Platform.exit():

@FXML
public void exitApplication(ActionEvent event) {
Platform.exit();
}

只要重写主类上的stop() 方法即可保存文件。

@Override
public void stop(){
System.out.println("Stage is closing");
// Save file
}

如您所见,通过使用 stop(),您不再需要收听关闭请求来保存文件(但如果您想阻止窗口关闭,您可以这样做)。

关于JavaFX:阶段关闭处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26619566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com