Я делаю Java-приложение с javaFx-интерфейсом в виде крошечной машины. Я хотел показать страницу загрузки и загрузить файлы данных во время работы индикатора прогресса.
Я знаю, что это может хорошо работать, если я добавлю Platform.runlater в код, загружающий fxml-файл и контроллер, но мне странно использовать Platform.runlater в главном потоке приложения javaFx. Я проверил название темы, но они были одинаковыми. Также это работает, если он запускается отдельно с использованием аннотации.
Почему мне нужно использовать Platform.runlater?
Если я не добавлю это, загрузка изображения перевернет белый экран и пропустит изображение, а просто покажет вид меню.
// Обработать
// 1. Установить изображение загрузки страницы
// 2. Загрузить файлы данных
// 3. Загрузить следующую страницу (меню)
public void loadHomeMenuPage() {
setLoadingImage();
execLoadingData();
execLoadingView(this);
}
private void setLoadingImage() {
System.out.println("Load -> " + Thread.currentThread());
File file = new File("Resources/images/load.png");
InputStream is;
try
{
is = new FileInputStream(file);
this.logoImageView.setImage(new Image(is));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
private void execLoadingData() {
// load openCv files
new LoadOpenCV();
// load protocol files
new ProtocolLoader().load();
// load language pack here
}
private void execLoadingView(IController loadController) {
//Load homeMenu after loading all data
//Platform.runLater(() -> {
System.out.println(Thread.currentThread());
IController controller = (IController) FxmlUtils.LOAD
.fxmlPath(PathFxml.ABS_PATH_HOME_MENU_VIEW)
.pane("BorderPane")
.set2BaseBorderPane(this.baseBorderPane, "center")
.exec();
controller.setBaseBorderPane(this.baseBorderPane);
//});
}