Jak prawidłowo tworzyć wątki w javaFX?

0

Od paru dni próbuje wykorzystać wątki w javafx i nie mogę znaleźć przejrzystych informacji jak powinno się tworzyć nowy wątek i jak on dokładnie działa.
Znalazłem jakieś przykłady wątków ale nie umiem go zatrzymać i ponownie uruchomić.

Będę wdzięczny za wszelką pomoc.

0

tak ale nie do konca rozumiem po angielsku, może ktoś wie gdzie moge o tym poczytać po polsku.

0

Dzięki Wielkie.
Póki co to jestem w połowie czytania tego tutoriala po angielsku.
http://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm#JFXIP546
Idzie jak krew z nosa bo wielu słówek nie rozumiem i nie do końca łąpię sens ale jakoś idzie :)

0

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.

  1. Czy mógłby ktoś zerknąć na te rozwiązanie i powiedzieć jak to się prawidłowo robić.
  2. 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();
    }
}
0

Jeżeli chcesz dokonywać zmian w GUI z innego wątku to możesz to robić przez Platform.runLater() albo tak jak zrobiłeś. Java FX dość mocno forsuje bindingi, w necie ciężko coś sensownego znaleźć, temat nieźle opisany w książce Learn JavaFX 8 od wydawnictwa apress.

0

dzięki zaraz poszukam ...

Tak jak zrobiłem niby działa ale chce zeby wątek aktualizował nie tylko jedną textArea dodatkowo też różne textFieldy itp a message mam tylko jedną, i nie wiem czy tworzyć oddzielny wątek dla każdego pola tekstowego czy jakoś inaczej?

1 użytkowników online, w tym zalogowanych: 0, gości: 1