Napisałem prosty program w javaFX z wątkiem tylko nie bardzo umiem dodać tekst do TextArea jeśli jest powiązana z wątkiem stworzyłem proste obejście poprzez zmienną ale nie jest to chyba prawidłowe podejście.
- Czy mógłby ktoś zerknąć na te rozwiązanie i powiedzieć jak to się prawidłowo robić.
- Szukam informacji na temat wiązań w jawie może zna ktoś przystępny link dla początkującego.
package basic_concurency;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextArea;
public class FXMLDocumentController implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {
watki();
}
@FXML
public TextArea textArea;
public static Service<Void> backgroundThread;
String updateTextarea = "";
@FXML
private void handleButtonAction(ActionEvent event) {
updateTextarea = "Tekst Dopisany do TextArea \n";
}
void watki() {
backgroundThread = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
for (int i = 0; i < 100; i++) {
updateMessage("\n"+ updateTextarea + "iter: " + i + textArea.getText());
updateTextarea = "";
Thread.sleep(1000);
}
return null;
}
};
}
};
backgroundThread.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
System.out.println("DDONE!");
textArea.textProperty().unbind();
}
});
textArea.textProperty().bind(backgroundThread.messageProperty());
backgroundThread.restart();
}
}