JavaFX Nie odświeża label +blokuje apke

0

Nie potrafię poradzić sobie z odświeżaniem bieżącej wartości Etykiety.
Tworzę watek w którym następuję odliczanie do 10.
Po wciśnięciu przycisku StartButton apka zatrzymuje się na 10s po czym wyświetla liczbę 10.
Proszę o podpowiedzi.

 public void initialize(URL arg0, ResourceBundle arg1) {

    StartButton.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {

                Watek wk = new Watek();
                Thread thrr = new Thread(wk);
                thrr.start();

                while(thrr.isAlive()){
                try {
                    Watek.sleep(1000);
                    Czas.setText(Integer.toString(Watek.getSekundy()));

                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                }

        }

Kod wątku

public void run() {

        try {

            for(int i=0;i<10;i++) {
                Thread.sleep(1000);
                setSekundy(getSekundy()+1); 
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
1

Blokujesz JavaFX Application Thread, a tylko w nim jest odświeżanie GUI. Poczytaj to: https://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm

0

Dla takich rzeczy skorzystaj z

Platform.runLater(new Runnable) {
  public void run() {
  // tu Twój kod
  }
}
2

@miiichal_er
Moim zdaniem samo Platform.runLater nie załatwi sprawy, jeśli kolo będzie robił Thread.sleep w wątku UI-owym. Tutaj trzeba użyć Taska.

0

Poradziłem sobie, dzięki wielkie za pomoc.

Stworzyłem Service dla którego utworzyłem obiekt Task w którym obsłużyłem wątek.
W tasku użyłem metody "updateMassage" po to żeby móc zbindować Jlabel z wartością aktualną w wątku.

czas.textProperty().bind(backgroundThread.messageProperty()); // gdzie backgroundThread - to obiekt Service

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