Я пытался поместить сцену загрузки между сценами, и моя идея заключалась в следующем:
- Запустить поток для создания нужной сцены;
- Метод созданиясцена также устанавливает созданную сцену в атрибут Scene класса;
- Во время выполнения потока создается и устанавливается сцена загрузки.
- Когда поток завершен, сценаустановите желаемую сцену.
Очевидно, что вся сцена загрузки игнорируется, а желаемая сцена просто устанавливается прямо.Держу пари, что поток не работает одновременно.
Вот часть задачи и соответствующие атрибуты.
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);
}