如何在窗口closures时closuresJavaFX应用程序?

在Swing中,当窗口closures时,只需使用setDefaultCloseOperation()closures整个应用程序即可。

但是在JavaFX中,我找不到一个等价的东西。 我打开了多个窗口,如果窗口closures,我想closures整个应用程序。 在JavaFX中如何做到这一点?

编辑:

我明白,我可以重写setOnCloseRequest()在窗口closures执行一些操作。 问题是应该执行什么操作来终止整个应用程序?

 stage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent event) { stop(); } }); 

Application类中定义的stop()方法什么也不做。

当最后一个Stageclosures时,应用程序自动停止。 此时, Application类的stop()方法被调用,所以你不需要等同于setDefaultCloseOperation()

如果您想在此之前停止应用程序,则可以调用Platform.exit() ,例如在onCloseRequest调用中。

您可以在Application的javadoc页面上获得所有这些信息: http : //docs.oracle.com/javafx/2/api/javafx/application/Application.html

作为参考,这里是使用Java 8的最小实现:

 @Override public void start(Stage mainStage) throws Exception { Scene scene = new Scene(new Region()); mainStage.setWidth(640); mainStage.setHeight(480); mainStage.setScene(scene); //this makes all stages close and the app exit when the main stage is closed mainStage.setOnCloseRequest(e -> Platform.exit()); //add real stuff to the scene... //open secondary stages... etc... } 

一些提供的答案没有为我工作(closures窗口后javaw.exe仍然运行),或者,eclipse在应用程序closures后显示一个exception。

另一方面,这是完美的作品:

 primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent t) { Platform.exit(); System.exit(0); } }); 
 public void handle(WindowEvent event) { Platform.exit(); System.exit(0); } 

你试过这个.. setOnCloseRequest

 setOnCloseRequest(EventHandler<WindowEvent> value) 

有一个例子

使用Java 8这为我工作:

 @Override public void start(Stage stage) { Scene scene = new Scene(new Region()); stage.setScene(scene); /* ... OTHER STUFF ... */ stage.setOnCloseRequest(e -> { Platform.exit(); System.exit(0); }); } 

这似乎适用于我:

 EventHandler<ActionEvent> quitHandler = quitEvent -> { System.exit(0); }; // Set the handler on the Start/Resume button quit.setOnAction(quitHandler); 

尝试

  System.exit(0); 

这应该终止主线程并结束主程序

您必须重写应用程序实例中的“stop()”方法才能使其正常工作。 如果你甚至已经覆盖了空的“stop()”,那么在最后一个阶段closures之后,应用程序会优雅地closures(实际上,最后一个阶段必须是使初始阶段完全工作的主要阶段)。 在这种情况下,不需要任何额外的Platform.exit或setOnCloseRequest调用。