初级阶段结束时如何关闭所有阶段?

时间:2012-08-30 10:37:09

标签: javafx-2

我有一个应用程序,当发生异常时我会调用以下代码 - 也就是说,它位于“try / catch”的“catch”中。它只是创建一个类似“弹出窗口”的窗口,告诉用户输入一个int。

Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(VBoxBuilder.create().
children(new Text("Please enter an integer."), new Button("Ok.")).
alignment(Pos.CENTER).padding(new Insets(5)).build()));
dialogStage.show();

唯一的问题是,即使主要阶段(即public void start(Stage primaryStage)中的参数)被关闭,阶段仍然存在。

我尝试了什么?:

通过将它定义为类变量,我在整个类中使对话框可见。然后我实现了以下代码:

primaryStage.setOnCloseRequest((new EventHandler<WindowEvent>(){

        @Override
        public void handle(WindowEvent arg0) {
                            arg0.consume();
            try
            {
             dialogStage.close();

                            }
            catch(Exception ex)
            {
                System.out.print(ex.getMessage()+"\r\n");
            }

        }
    }));
}

这“工作”是因为当用户试图退出主应用程序时会关闭对话台,但是,它实际上并没有按照我的意图执行操作:当您尝试关闭主要阶段时,只关闭对话框。

这也是一个美学上令人不快的解决方案,因为我不希望全班知道愚蠢的对话框,它只位于一个try / catch中,可能永远不会被使用。

我想知道是否有一个简单的解决方案,告诉对话台在主要阶段进行时关闭,以及我不需要在try / catch之外编写多少代码。

1 个答案:

答案 0 :(得分:10)

在主舞台上的事件OnCloseRequest上,执行Platform.exitdocs.oracle.com/javafx/2/api/javafx/application/Platform.html