我目前在控制器中使用 ThreadExecutor 时遇到了这个问题。如果 ThreadExecutor 没有关闭,应用程序不会退出。请参阅此处:
如何关闭所有执行程序时退出应用程序
由于在控制器中识别应用程序出口可能会出现问题,因此您可以从 Application 类中获取对控制器的引用,如下所示(使用 Eclipse 中的示例应用程序):
public class Main extends Application {
private SampleController controller;
@Override
public void start(Stage primaryStage) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("MyFXML.fxml"));
BorderPane root = (BorderPane)loader.load(getClass().getResource("Sample.fxml").openStream());
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
controller = loader.<SampleController>getController();
}
catch(Exception e)
{
e.printStackTrace();
}
}
您的应用程序覆盖了 stop 方法,您可以在其中调用控制器的内务管理方法(我使用名为 startHousekeeping 的方法):
/**
* This method is called when the application should stop,
* and provides a convenient place to prepare for application exit and destroy resources.
*/
@Override
public void stop() throws Exception
{
super.stop();
if(controller != null)
{
controller.startHousekeeping();
}
Platform.exit();
System.exit(0);
}