Мой класс расширяет стадию JavaFX. В среде разработки его никогда не удается загрузить и обработать, но мои пользователи регулярно сообщают, что иногда он неправильно отображает , который выглядит так на Windows 10 .
Сам класс это довольно стандартное дело, я запускаю его с помощью Platform.runLater () и поток обрабатывает, как и ожидалось. Каждый вывод журнала записывается, и можно взаимодействовать с экраном, как запрограммировано, или закрыть его, что не вызывает каких-либо ошибок или исключений.
Конструктор рабочей области довольно прост c:
log.debug("Constructing the screen.");
setTitle("Screen");
setAlwaysOnTop(true);
initStyle(StageStyle.UNDECORATED);
try {
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getResource("....fxml"));
Pane panel = fxmlLoader.load();
controller = fxmlLoader.getController();
controller.postInit(currentIdle); // some elements processed
Scene scene = new Scene(panel);
setScene(scene);
scene.setOnKeyPressed(controller::handleKeyEvent);
setOnHiding((WindowEvent e) -> processor::leaveScreen);
log.debug("Showing the screen.");
show();
log.debug("Screen shown.");
requestFocus();
log.debug("Finished constructing the screen.");
} catch (IOException e) {
// ...doesn't go here
}
Из журналов, кажется, все работает как задумано, в том числе элементы управления, сочетания клавиш и перехватчик метода exitScreen (), и не выдается никаких исключений, за исключением того, что пользователь иногда не может видеть содержимое и элементы управления на экране. .
На что я смотрю? Это проблема с моим кодом или ошибка JavaFX? Проблема с графикой на ноутбуке пользователя? Можете ли вы придумать способ предотвратить или, по крайней мере, обнаружить это состояние и каким-либо образом принудительно вызвать refre sh?
В качестве альтернативы, при каких обстоятельствах возможно, что этап JavaFX проходит свой метод show () без ошибки , но на самом деле не показывает его содержимое?
Затрагиваемые среды: все комбинации последних версий JDK 14 GA, Corretto 11 (пользовательский образ, созданный jlink) и JavaFX 11.0.2 или 14.0.1 - это не имеет значения. Это также происходит независимо от того, установлено ли приложение с JRE с помощью jlink, используя jpackage или Advanced Installer.