在Swing中,你可以简单地使用setDefaultCloseOperation()
时关闭窗口关闭整个应用程序。
然而,在JavaFX的我无法找到一个等效。 我打开了多个窗口,我想如果是关闭一个窗口关闭整个应用程序。 什么是做,在JavaFX的方式?
编辑:
我明白,我可以覆盖setOnCloseRequest()
对窗口关闭执行某些操作。 现在的问题是应该执行什么操作终止整个应用程序?
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
stop();
}
});
将stop()
中定义的方法Application
类什么都不做。
当最后一个应用程序会自动停止Stage
被关闭。 在这一刻, stop()
你的方法Application
类被调用,所以你并不需要一个相当于setDefaultCloseOperation()
如果要停止之前的应用程序,你可以调用Platform.exit()
例如在你的onCloseRequest
通话。
你可以拥有的javadoc的页面上的所有信息,这些Application
: http://docs.oracle.com/javafx/2/api/javafx/application/Application.html
有些提供的答案并没有为我工作(javaw.exe的仍在运行关闭窗口后),或月食显示异常的应用程序关闭后。
在另一方面,这完美的作品:
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent t) {
Platform.exit();
System.exit(0);
}
});
作为参考,在这里是用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...
}
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
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);
getContentPane.remove(jfxPanel);
试试吧 (:
对我来说,只有以下工作:
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
Platform.exit();
Thread start = new Thread(new Runnable() {
@Override
public void run() {
//TODO Auto-generated method stub
system.exit(0);
}
});
start.start();
}
});
必须重写“停止()”方法在你的应用实例,以它的工作原理。 如果你已经覆盖甚至是空的“停止()”,那么应用程序正常关闭的最后阶段关闭后(实际上是最后阶段必须是初级阶段,使其工作完全在应该是)。 没有任何额外的Platform.exit或setOnCloseRequest呼叫需要在这种情况下。