Задать вопрос
  • Как правильно обновлять Progressbar из цикла?

    Вот пример, в отдельном потоке стартую примерно тоже, что в вашем примере, без runLater() в принципе выкидывает exception Not in FX thread. Зато с runLater() всё работет и прогресс обновляется.

    Возможно, вы вызываете метод runnCommand не в отдельном потоке или у вас проблема в другом месте. Попробуйте вызвать свой метод в отдельном потоке.

    import javafx.application.Application;
    import javafx.application.Platform;
    import javafx.scene.Scene;
    import javafx.scene.control.ProgressBar;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class TestJFX extends Application {
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage primaryStage) {
            System.out.println("start");
            ProgressBar bar = new ProgressBar();
            StackPane root = new StackPane();
    
            root.getChildren().add(bar);
            primaryStage.setScene(new Scene(root, 300, 250));
            primaryStage.show();
    
             new Thread(() -> {
                 System.out.println("Thread started");
                 doAlot(bar);
             }).start();
        }
    
        public void doAlot(ProgressBar bar){
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String s = "";
            try {
                while (!(s = reader.readLine()).equals("null")) {
                    System.out.println("Trying to parse progress");
                    Double progress = Double.parseDouble(s.split("%")[0]) / 100;
                    Platform.runLater(() -> bar.setProgress(progress));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }