Я показываю сетку пользователю и обновляю ее пару раз в цикле for. Что мне нужно сделать, так это то, что перед каждым обновлением мне нужно создать секунду задержки, чтобы позволить пользователю увидеть сцену на секунду.
VisualizationThread visualizationThread = new VisualizationThread(matrix, bestIndividual, centerX, centerY);
for(int i=0; i<bestIndividual.size(); i++){
switch (bestIndividual.get(i)){
case 1:
visualizationThread.setCurrentX(visualizationThread.getCurrentX()-1);
break;
case 2:
visualizationThread.setCurrentY(visualizationThread.getCurrentY()+1);
break;
case 3:
visualizationThread.setCurrentX(visualizationThread.getCurrentX()+1);
break;
case 4:
visualizationThread.setCurrentY(visualizationThread.getCurrentY()-1);
break;
}
visualizationThread.run();
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
}
Класс VisualizationThread:
public class VisualizationThread implements Runnable{
private ArrayList<ArrayList<Integer>> matrix;
private ArrayList<Integer> solution;
private int currentX;
private int currentY;
private Stage primaryStage;
public VisualizationThread(ArrayList<ArrayList<Integer>> matrix, ArrayList<Integer> solution, int currentX, int currentY){
this.matrix = matrix;
this.solution = solution;
this.currentX = currentX;
this.currentY = currentY;
this.primaryStage = new Stage();
}
public void run() {
if(primaryStage.isShowing()){
primaryStage.close();
}
BorderPane root = new BorderPane();
GridPane grid = new GridPane();
grid.setPadding(new Insets(10));
grid.setHgap(10);
grid.setVgap(10);
StackPane[][] screen_buttons = new StackPane[matrix.size()][matrix.size()];
for (int y=0;y<matrix.size();y++) {
for (int x=0;x<matrix.get(y).size();x++) {
screen_buttons[y][x] = new StackPane();
Rectangle rec = new Rectangle(30,30);
if(x == currentX && y == currentY){
rec.setFill(Color.GREEN);
}else {
rec.setFill(matrix.get(x).get(y) == 0 ? Color.YELLOW : Color.RED);
}
rec.setStyle("-fx-arc-height: 10; -fx-arc-width: 10;");
screen_buttons[y][x].getChildren().addAll(rec);
grid.add(screen_buttons[y][x], x, y);
}
}
//container for controls
GridPane controls = new GridPane();
root.setCenter(grid);
root.setBottom(controls);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public int getCurrentX() {
return currentX;
}
public void setCurrentX(int currentX) {
this.currentX = currentX;
}
public int getCurrentY() {
return currentY;
}
public void setCurrentY(int currentY) {
this.currentY = currentY;
}
}
Моя проблема в том, что сцена выглядит пустой, пока не будут выполнены все итерации. Но я хочу показать каждую итерацию на некоторое время, и я попытался реализовать это с помощью Thread.sleep (). Очевидно, это не сработало. Это почему? Как мне этого добиться? С наилучшими пожеланиями,