Вот пример, в отдельном потоке стартую примерно тоже, что в вашем примере, без 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();
}
}
}
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Возможно, вы вызываете метод runnCommand не в отдельном потоке или у вас проблема в другом месте. Попробуйте вызвать свой метод в отдельном потоке.