2013-04-24 3 views
1

Как закрыть этап в JavaFX 2 после возникновения какого-либо определенного внешнего события? Предположу, у меня есть сцена с простым прогрессом баром, который засыпается по Задаче (заимствованный из другого ответа):Заключительный этап после определенного события

Task<Void> task = new Task<Void>(){ 
       @Override 
       public Void call(){ 
        for (int i = 1; i < 10; i++) { 
         try { 
          Thread.sleep(200); 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } 
         System.out.println(i); 
         updateProgress(i, 10); 
        } 
       return null;     
       } 
      }; 

Как закрыть окно автоматически (и откройте следующий) после выполнения задачи и ProgressBar заполнен до 100%?

+2

Существует общая информация о закрытии этапа в связанных вопросах: [JavaFX 2.0: закрытие этапа (окна)] (http://docs.oracle.com/javafx/2/api/javafx/application/Platform .html) и [JavaFX2: Закрытие этапа (подъязыка) изнутри самого себя] (http://stackoverflow.com/questions/11468800/javafx2-closing-a-stage-substage-from-within-itself) – jewelsea

ответ

3

Перед возвратом null; Вы можете добавить

Platform.runLater(
    new Runnable() { 
     public void run() { 
      stage.close(); 
     } 
    } 
); 

или

progressBar.progressProperty().addListener(new ChangeListener<Number>(){ 
//add checking, that progress is >= 1.0 - epsilon 
//and call stage.close(); 
}) 

Первый лучше. Но обратите внимание, что эта задача выполняется в отдельном потоке. поэтому вы должны поместить запрос на stage.close() в поток JFX с помощью специального вызова.

Кроме того, jewelsea предоставляет ссылки на вопросы по закрытию сцены в комментарии к вопросу.