I'm trying to update text inside a javafx textArea element instantly to show execution information using both thread and task but nothing seems working, althought when I print something in console it works thus the thread is executing. The program prints all the messages once the program is executed, but i want show the messages as the same time as the program is executing.
Here I have my tsak and thread declarations
    @Override
public void initialize(URL url, ResourceBundle rb) {
    System.setProperty("webdriver.gecko.driver", "C:\\Users/lyesm/Downloads/geckodriver-v0.26.0-win64/geckodriver.exe");
    try {
        restoreValues();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    text = new Text(this.getLogs());
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            Runnable updater = new Runnable() {
                @Override
                public void run() {
                    printMessages();
                    System.out.println(" working on ... \n");
                }
            };
            while (true) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                }
                //Platform.runLater(updater);
            }
        }
    });
    thread.setDaemon(true);
    thread.start();
    service = new Service<Void>() {
        @Override
        protected Task<Void> createTask() {
            return new Task<Void>() {
                @Override
                protected Void call() throws Exception {
                    Platform.runLater(() -> textArea.appendText(logs));
                    return null;
                }
            };
        }
    };
    service.start();
}
I'm calling the service from this method
 public void launchTest() {
    this.setLogs("\n\n");
    service.restart();
    this.setLogs("   Test starting ...\n");
    service.restart();
    //this.setLogs("   Opening the navigator \n");
    this.setDriver(new FirefoxDriver());
    //this.setLogs("   Reaching http://127.0.0.1:8080/booksManager ... \n");
    driver.get("http://127.0.0.1:8080/booksManager");
    //this.setLogs("   Setting test data \n");
    driver.findElement(By.id("lyes")).click();
    driver.findElement(By.name("email")).sendKeys(pseudo.getText());
    driver.findElement(By.name("password")).sendKeys(password.getText());
    //this.setLogs("   Submitting ... \n");
    driver.findElement(By.name("submit")).click();
    if(driver.getCurrentUrl().equals("http://127.0.0.1:8080/booksManager/Views/index.jsp") == true) {
        //InputStream input= getClass().getResourceAsStream("https://w0.pngwave.com/png/528/278/check-mark-computer-icons-check-tick-s-free-icon-png-clip-art-thumbnail.png");
        //Image image = new Image(input);
        //ImageView imageView = new ImageView(image);
        Label label = new Label("   Test successed");
        testsInfos.getChildren().add(label);
    }else {
        Text textRes = new Text("\n  Test failed  ");
        textRes.setFill(javafx.scene.paint.Color.RED);
        testsInfos.getChildren().add(textRes);
    }
    driver.close();
}
And here the printMessage method called from the thread
public void printMessages() {
    String ll = this.getLogs();
    this.text.setText(ll);
    testsInfos.getChildren().remove(text);
    testsInfos.getChildren().add(text);
    textArea.clear();
    textArea.setText(ll);
}
Neither method seems to work.
Does anybody have any idea how to fix it ?
Edited:
   package application;
import java.util.concurrent.CountDownLatch;
import javafx.application.Application;
import javafx.application.Platform; 
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Main extends Application {
private Service<Void> service;
@Override
public void start(Stage primaryStage) throws InterruptedException {
    StackPane root = new StackPane();
    TextArea ta = new TextArea();
    ta.setDisable(true);
    root.getChildren().add(ta);
    Scene scene = new Scene(root, 200, 200);
    // longrunning operation runs on different thread
    /*Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            Runnable updater = new Runnable() {
                @Override
                public void run() {
                    incrementCount();
                }
            };
            while (true) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                }
                // UI update is run on the Application thread
                Platform.runLater(updater);
            }
        }
    });
    // don't let thread prevent JVM shutdown
    thread.setDaemon(true);
    thread.start();*/
    primaryStage.setScene(scene);
    primaryStage.show();
    service = new Service<Void>() {
        @Override
        protected Task<Void> createTask() {
            return new Task<Void>() {
                @Override
                protected Void call() throws Exception {
                    final CountDownLatch latch = new CountDownLatch(1);
                    Platform.runLater(new Runnable() {                          
                        @Override
                        public void run() {
                            try{
                                ta.appendText("\n Printed ");
                            }finally{
                                latch.countDown();
                            }
                        }
                    });
                    latch.await();
                    return null;
                }
            };
        }
    };
    service.start();
    showIT();
}
public static void main(String[] args) {
    launch(args);
}
public void showIT() throws InterruptedException {
    service.restart();
    for(int i = 0;i<1000000;i++) {
        System.out.println(i);
    }
    for(int i = 0;i<1000000;i++) {
        System.out.println(i);
    }
    service.restart();
    for(int i = 0;i<1000000;i++) {
        System.out.println(i);
    }
    for(int i = 0;i<1000000;i++) {
        System.out.println(i);
    }
    service.restart();
}
}
 
    