我想在关闭JavaFX应用程序之前保存文件.
这就是我在以下方式设置处理程序的方式Main::start:
primaryStage.setOnCloseRequest(event -> {
System.out.println("Stage is closing");
// Save file
});
Run Code Online (Sandbox Code Playgroud)
Stage::close当按下按钮时控制器调用:
@FXML
public void exitApplication(ActionEvent event) {
((Stage)rootPane.getScene().getWindow()).close();
}
Run Code Online (Sandbox Code Playgroud)
如果我关闭窗口,单击窗口边框上的红色X(正常方式),然后我得到输出消息" Stage is closing",这是所需的行为.
但是,在调用Controller::exitApplication应用程序时关闭而不调用处理程序(没有输出).
如何让控制器使用我添加的处理程序primaryStage?
我有一个显示结果图表的程序。我想等到用户关闭条形图以继续到下一行代码,询问他们是否要为图表输入新信息。
Scene scene = BarGraph.getBarChart();
primaryStage.setScene(scene);
primaryStage.setTitle("Bar Chart");
primaryStage.show();
repeat = JOptionPane.showConfirmDialog(null, "Would you like to enter another number?");
Run Code Online (Sandbox Code Playgroud)
发生的情况是条形图的场景将打开,但是将不显示任何内容,并立即弹出JOptionPane问题。如果我单击否,则显示图表,但程序结束。如果我单击是,该程序将循环返回到较早的对话框窗口,但是直到另一个对话框结束时才显示图表。
我想等待提示用户,直到他们关闭条形图。在这一点上,我感到非常沮丧,以至于我什至都设置了诸如wait(5000)之类的人为的暂停,尽管我也无法使其正常工作。
我已经读了很多,还没有找到实际可行的解决方案。最接近的问题是:JavaFX等到阶段关闭
据我了解,我实际上不能使程序等待,但是可以将操作设置为在关闭窗口后执行。但是按照建议进行操作只会使平台打开,然后立即关闭。我去过其他几个兔子洞,但无济于事。