Почему я должен использовать Platform.runlater в основном потоке javafx в этом коде? - PullRequest
0 голосов
/ 09 января 2019

Я делаю 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);

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