Поток задач JavaFX, очевидно, не работает одновременно - PullRequest
0 голосов
/ 23 октября 2018

Я пытался поместить сцену загрузки между сценами, и моя идея заключалась в следующем:

  1. Запустить поток для создания нужной сцены;
  2. Метод созданиясцена также устанавливает созданную сцену в атрибут Scene класса;
  3. Во время выполнения потока создается и устанавливается сцена загрузки.
  4. Когда поток завершен, сценаустановите желаемую сцену.

Очевидно, что вся сцена загрузки игнорируется, а желаемая сцена просто устанавливается прямо.Держу пари, что поток не работает одновременно.

Вот часть задачи и соответствующие атрибуты.

private Stage pokeWindow = new Stage();
    private Scene currentScene;
    private boolean sceneReady = false;
    private String targetScene;
    private int genericInt;

    private final Task setGenericScene = new Task(){
        @Override
        protected Object call() throws Exception {
           sceneReady = false;

        if(targetScene.equals("summaryScene")){
            setSummaryScene(genericInt);
            sceneReady = true;
        }

        return null;
        }  
    };

Вот сцена загрузки.

public void setLoadingScene(){
       Thread loadScreen = new Thread(setGenericScene);
        loadScreen.start();


        if(!sceneReady){
        GridPane background = new GridPane();
        BackgroundImage loadingBG = new BackgroundImage(new Image((new File("src/resources/tiles/pokedexfullbg.png")).toURI().toString()), BackgroundRepeat.REPEAT, BackgroundRepeat.REPEAT, BackgroundPosition.DEFAULT, BackgroundSize.DEFAULT);
        background.setBackground(new Background(loadingBG));

    [...]
    [more javafx code regarding the loading scene]

    Scene loadingScene = new Scene(background, 512, 416);
        this.pokeWindow.setScene(loadingScene);

        animation1.play();
        animation2.play();
        animation3.play();
        animation4.play();
        animation5.play();
        animation6.play();
        animation7.play();
        animation8.play();

        while(!sceneReady){}
        }

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