Как закрыть все этапы, когда первичный этап закрыт?

У меня есть приложение, в котором я вызываю следующий код, когда возникает исключение, то есть он находится в пределах «улова» «попробовать/уловить». Он просто создает «всплывающее» окно, которое вместо этого предлагает пользователю ввести целое число.

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");
            }

        }
    }));
}

Это «работает» в том смысле, что диалоговое окно закрывается, когда пользователь пытается выйти из основного приложения, однако на самом деле это не делает того, что я хотел: когда вы пытаетесь закрыть основной этап, закрывается только диалоговое окно.

Это также неприятное с эстетической точки зрения решение, так как я не хочу, чтобы весь класс знал о глупом диалоговом окне, которое находится только в одной попытке/улове и может никогда не использоваться.

Я хотел бы знать, есть ли простое решение, которое сообщает диалоговому окну закрыться, когда основной этап закрывается, и где мне не нужно писать много кода за пределами моей попытки/поймать.


person The Unfun Cat    schedule 30.08.2012    source источник


Ответы (1)


В событии OnCloseRequest на главной сцене выполните Platform.exit (docs.oracle .com/javafx/2/api/javafx/application/Platform.html)

person Teocali    schedule 30.08.2012