如何在窗口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()
方法什么也不做。
当最后一个Stage
closures时,应用程序自动停止。 此时, 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调用。