2015-08-25 2 views
1

Настоящая причина, по которой я пытаюсь это сделать, - запустить игровой (бесконечный) цикл при отображении пользовательского интерфейса, но это показывает ту же проблему.JavaFX WindowEvent.WINDOW_SHOWN стрельба перед фактическим изображением окна

primaryStage.setScene(new Scene(root)); 

    primaryStage.addEventHandler(WindowEvent.WINDOW_SHOWN, event -> { 
     System.out.println("Shown"); 
     try { 
      Thread.sleep(4000); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    }); 

    primaryStage.show(); 

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

+1

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

+0

Никогда не вызывайте 'Thread.sleep' в потоке приложения JavaFX, просто не делайте этого ... все, что он сделает, это повесить ваш интерфейс. – jewelsea

+0

«Настоящая причина, по которой я пытаюсь это сделать, - запустить цикл игры (бесконечный), когда пользовательский интерфейс показывает« =>, что вы не показываете этот код, но если вы используете этот код в потоке приложений JavaFX, будет иметь тот же эффект от замораживания пользовательского интерфейса, что и ваш вызов «Thread.sleep». Я предполагаю, что ваш вопрос здесь - проблема [XY] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – jewelsea

ответ

0

Не совсем ответ на исходный вопрос, но комментарий относительно того, что решило проблему, поиск которой привел меня сюда.

Мне нужно было отобразить пользовательский диалог APPLICATION_MODAL, снятый с помощью события события MainScene.

Если я отобразил диалоговое окно с помощью showAndWait(), то декорации окон родительского этапа никогда не выполнялись правильно, пока диалог не закрылся. Если я отобразил диалоговое окно с помощью show() родительский рендеринг правильно, но у меня все еще была правильная модальная блокировка событий-очереди, в которой я нуждался.

Смежные вопросы