我想在关闭JavaFX应用程序之前保存文件。
这就是我在中设置处理程序的方式Main::start
:
primaryStage.setOnCloseRequest(event -> {
System.out.println("Stage is closing");
// Save file
});
Stage::close
当按下按钮时,控制器将调用:
@FXML
public void exitApplication(ActionEvent event) {
((Stage)rootPane.getScene().getWindow()).close();
}
如果关闭窗口,请单击窗口边框上的红色X(正常方式),然后会收到输出消息“ Stage is closing
”,这是所需的行为。
但是,在调用Controller::exitApplication
应用程序时,它会在不调用处理程序的情况下关闭(没有输出)。
如何使控制器使用添加到的处理程序primaryStage
?
如果你看一下在生命周期中的Application
类:
每当启动应用程序时,JavaFX运行时就会依次执行以下操作:
- 构造指定的Application类的实例
- 调用
init()
方法- 调用
start(javafx.stage.Stage)
方法- 等待应用程序完成,这在发生以下任一情况时发生:
- 应用程序调用
Platform.exit()
- 最后一个窗口已关闭,并且
implicitExit
on属性Platform
为true
- 调用
stop()
方法
这意味着您可以调用Platform.exit()
控制器:
@FXML
public void exitApplication(ActionEvent event) {
Platform.exit();
}
只要您覆盖stop()
主类上的方法以保存文件。
@Override
public void stop(){
System.out.println("Stage is closing");
// Save file
}
如您所见,通过使用,stop()
您不再需要侦听关闭请求来保存文件(尽管如果要防止窗口关闭,也可以这样做)。
我想在关闭JavaFX应用程序之前保存一个文件。 这就是我在中设置处理程序的方法: 以及当按下按钮时调用的控制器: 如何使控制器使用我添加到中的处理程序?
我在JavaFX中有一个阶段,可以通过多种方式关闭,通过单击红色(X)或通过调用的按钮 无论舞台如何关闭,我都想在舞台关闭之前(或关闭时)执行一个动作。 如果我使用以下代码: 然后,当我单击(X)时调用处理程序,但当我调用<code>myStage.close()</code>时不会调用 这与这个问题讨论的问题相同(有一个关键区别):JavaFX:Stage-close-handler 不同之处在
问题内容: 我在JavaFX中有一个舞台,可以通过多种方式关闭该舞台,方法是单击红色(X)或通过一个调用 无论舞台如何关闭,我都希望在舞台关闭之前(或之后)执行操作。 如果我使用以下代码: 然后当我单击(X)时调用处理程序,但当我调用 不同之处在于,他希望在整个应用程序关闭时调用处理程序,因此可以覆盖的方法。但是,我并没有关闭整个应用程序,只是一个阶段。并且没有重写的方法。 谢谢你的帮助。 问题答
我正在JavaFX 2.0中制作一个应用程序。从我的主窗口开始一个带有一些设置的新窗口。调整完设置后,我想按一个像“保存更改”这样的按钮。 我想用这个按钮保存更改并关闭窗口。我所说的关闭意味着杀死它,而不是把它放在背景中或设置可见性。我读过关于方法阶段的书。关闭() http://docs.oracle.com/javafx/2.0/api/javafx/stage/Stage.html 正如您所
问题内容: 当我使用WebEngine创建播放YouTube视频的新舞台时,关闭它之后-Youtube继续在backgroung上播放。如果我使用“ Platform.exit”-它会关闭我的所有JavaFX App,但我只想关闭为YouTube创建的阶段。 这是我针对YouTube播放器的课程: 在“主舞台”中单击按钮后,我的YouTube播放器舞台正在创建: 问题答案: 您无法处置WebEng
我正在经历一个非常奇怪的行为,我怀疑这是JavaFX9 API中的一个bug,但我很谨慎,因为我更有可能遗漏了一些东西。 MCVE: 它给我带来的问题是,我无法为窗口大小/位置实现健壮的首选项保存,因为在Linux上,窗口会爬行。(场景宽度/高度可以作为一种变通方法,但仍然可疑。)