Загрузка fxml в качестве фонового процесса - Javafx

Мой начальный fxml (скажемhome.fxml) имеет много функций, поэтому для полной загрузки требуется много времени. Чтобы избежать разрыва во времени между запуском программы и загрузкой fxml, я ввел еще один fxml (скажем,loader.fxml) с изображением GIF, которое должно отображаться во время загрузки основного файла fxml. Проблема в том, что изображение gif в моем loader.fxml не перемещается, так как в программе зависает, пока home.fxml не будет загружен полностью. Чтобы избежать этого, я переместил загрузку home.fxml в поток, как показано в коде ниже.

public class UATReportGeneration extends Application {

    private static Stage mainStage;

    @Override
    public void start(Stage stage) {
        Parent loaderRoot = null;
        try {
            loaderRoot = FXMLLoader.load(getClass().getResource("/uatreportgeneration/fxml/Loader.fxml"));
        } catch (IOException ex) {
            Logger.getLogger(UATReportGeneration.class.getName()).log(Level.SEVERE, null, ex);
        }
        Scene loadScene = new Scene(loaderRoot);
        stage.setScene(loadScene);
        stage.initStyle(StageStyle.UNDECORATED);
        stage.getIcons().add(new Image(this.getClass().getResourceAsStream("/uatreportgeneration/Images/logo.png")));

        stage.show();


        mainStage = new Stage(StageStyle.UNDECORATED);
        mainStage.setTitle("Upgrade Analysis");
        mainStage.getIcons().add(new Image(this.getClass().getResourceAsStream("/uatreportgeneration/Images/logo.png")));
        setStage(mainStage);

        new Thread(() -> {
            Platform.runLater(() -> {
                try {
                    FXMLLoader loader = new FXMLLoader();
                    Parent root = loader.load(getClass().getResource("/uatreportgeneration/fxml/Home.fxml"));

                    Scene scene = new Scene(root);
                    mainStage.setScene(scene);
                    mainStage.show();
                    stage.hide();
                    System.out.println("Stage showing");
                    // Get current screen of the stage
                    ObservableList<Screen> screens = Screen.getScreensForRectangle(new Rectangle2D(mainStage.getX(), mainStage.getY(), mainStage.getWidth(), mainStage.getHeight()));
                    // Change stage properties
                    Rectangle2D bounds = screens.get(0).getVisualBounds();
                    mainStage.setX(bounds.getMinX());
                    mainStage.setY(bounds.getMinY());
                    mainStage.setWidth(bounds.getWidth());
                    mainStage.setHeight(bounds.getHeight());
                    System.out.println("thread complete");
                } catch (IOException ex) {
                    Logger.getLogger(UATReportGeneration.class.getName()).log(Level.SEVERE, null, ex);
                }

            });
        }).start();

    }

    public static Stage getStage() {
        return mainStage;
    }

    public static void setStage(Stage stage) {
        mainStage = stage;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        launch(args);
    }

}

Но после этого кода моя программа также зависает (изображение GIF не движется). Если я загружу fxml внеPlatform.runLater()Я получаю исключениеNot on FX Thread.

Я также устал использоватьTask() но с этого изображение GIF движется, но FXML не загружается в фоновом режиме, если я пытаюсь загрузить FXML за пределамиPlatform.runLater().

Может кто-нибудь, пожалуйста, помогите мне и скажите мне, как я могу исправить код, чтобы мой fxml загружался в фоновом режиме, не нарушая процесс переднего плана.

Ответы на вопрос(1)

Ваш ответ на вопрос