ProgressIndicator заканчивается, когда я начинаю другую стадию - PullRequest
0 голосов
/ 23 октября 2019

Я хочу создать приложение для начинающих. ProgressIndicator должен работать во время запуска новой стадии в новой теме. Но если я нажму на кнопку запуска, ProgressIndicator перестанет работать.

Это сработает, если я выполню какой-нибудь ввод-вывод и ProgressIndicator покажет прогресс. По-видимому, невозможно обновить два этапа в JavaFX параллельно, или у кого-нибудь есть решение для меня?

   public class Main extends Application {
        public void start(Stage primaryStage) {
            primaryStage.setScene(new Scene(new UserVC().getView(), 600, 200));
            primaryStage.show();
            userVC.autologin();
        }

        public static void main(String[] args) { launch(args); }
    }

    public class UserView  extends BorderPane {
        private ProgressIndicator progressIndicator = new ProgressIndicator();

        public UserView() {
            super.setCenter(createContent());
        }

        public Node createContent() {
            HBox userbox = new HBox();
            userbox.getChildren().add(progressIndicator);

            progressIndicator.show();

            return userbox;
        }
    }

    public class UserVC {
        private UserView view = new UserView();

        public UserVC() {
        }

        public void autologin() {
            Task<Void> task = new Task<Void>() {
                @Override public Void call() throws InterruptedException {
                    try {
                        Thread.sleep(1000);

                        Platform.runLater(new Runnable() {
                            @Override public void run() {
                                Stage stage = new Stage();
                                stage.setScene(new Scene(new MainControlVC().getView(), 900, 300));
                                stage.show();
                            }
                         });
                     }
                     catch(Exception e) {
                        e.printStackTrace();
                     }
                     return null;
                }
            };

         view.getProgressIndicator().progressProperty().unbind();
         view.getProgressIndicator().progressProperty().bind(task.progressProperty());


            new Thread(task).start();
        }
    }

1 Ответ

0 голосов
/ 28 октября 2019

Я изменил задачу на Thread, и теперь она работает нормально:

 Thread thread = new Thread() {
            public void run() {

                mainController = new MainControlVC(dataDirectory, user);

                Platform.runLater(new Runnable() {
                    @Override public void run() {
                        Stage stage = new Stage();
                        Scene scene = new Scene(mainController.getView(), mainController.getWidth(), mainController.getHeight());
                        stage.setScene(scene);
                        stage.show();
                    }
                });
            }
        };

        thread.start(); 
...