If you have a look at the life-cycle of the Application
class:
The JavaFX runtime does the following, in order, whenever an
application is launched:
- Constructs an instance of the specified Application class
- Calls the
init()
method- Calls the
start(javafx.stage.Stage)
method- 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 onPlatform
istrue
- Calls the
stop()
method
This means you can call Platform.exit()
on your controller:
@FXML
public void exitApplication(ActionEvent event) {
Platform.exit();
}
as long as you override the stop()
method on the main class to save the file.
@Override
public void stop(){
System.out.println("Stage is closing");
// Save file
}
As you can see, by using stop()
you don’t need to listen to close requests to save the file anymore (though you can do it if you want to prevent window closing).