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