Этап не начался после сокрытия - PullRequest
0 голосов
/ 11 марта 2019

Я хочу показывать-скрывать форму каждые 5 секунд.Когда форма скрыта - ее снова не видно.Я не понимаю, почему так.

Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.setAlwaysOnTop(true);
primaryStage.show();
Platform.setImplicitExit(false);

Platform.runLater(() -> System.out.println("Inside Platform.runLater()"));


ScheduledExecutorService hider = Executors.newScheduledThreadPool(1);
hider.schedule(
 new Runnable() {
  @Override public void run() {
   Platform.runLater(new Runnable() {
    @Override public void run() {
     if (primaryStage.isShowing()) {
      primaryStage.hide();
     } else {
      primaryStage.show();
     }

    }
   });
  }
 }, 5, TimeUnit.SECONDS);

1 Ответ

0 голосов
/ 11 марта 2019

ScheduledExecutorService.schedule :

Создает и выполняет одноразовое действие

Для периодического выполнения действия используйте ScheduledExecutorService.scheduleAtFixedRate :

Создает и выполняет периодическое действие

Кроме того, после скрытия основной стадии, runnable больше не вызывается, поэтому используйте setIconified(true) вместо скрытия:

      ScheduledExecutorService hider = Executors.newScheduledThreadPool(1);
                                                 hider.scheduleAtFixedRate(
           () -> Platform.runLater(() -> {
               if (!primaryStage.isIconified()) {
                   primaryStage.setIconified(true);
               } else {
                   primaryStage.setIconified(false);
               }
          }),
          5, //initial delay
          5, //period delay
          TimeUnit.SECONDS
     );

Рассмотримальтернативная реализация с использованием инструментов анимации javafx, таких как PauseTransition:

    PauseTransition pause = new PauseTransition(Duration.seconds(5));
    pause.setOnFinished(event ->{

         if (! primaryStage.isIconified()) {
             primaryStage.setIconified(true);
         } else {
             primaryStage.setIconified(false);
         }

         pause.play();
    });
    pause.play();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...