/ / Oś czasu nie działa w nieskończoność (JavaFx) - java, pętle, javafx, oś czasu, nieskończona

Oś czasu nie działa w nieskończoność (JavaFx) - java, pętle, javafx, oś czasu, nieskończona

Zwykłem mieć prostą, czasową (mniej więcej lub mniej) nieskończoną pętlę:

while (!canrun) {
do_stuff(); //simple calculation
update_gui(); //updates some labels
Thread.sleep(waittime);
}

Który, naturalnie zamarza aplikację JavaFX, dopóki nie zostanie zakończona wszystkimi obliczeniami (opcja canrun jest ustawiona na false).

Zastąpiłem go osią czasu:

    event = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
do_stuff();
update_gui();
}
};
keyframe = new KeyFrame(Duration.millis(waittime), event);
timeline = new Timeline(Timeline.INDEFINITE, keyframe);

do_stuff () wygląda następująco:

public void do_stuff() {
do_the_actual_stuff();
if (stuff_finished) timeline.stop();
}

(waittime jest tutaj liczbą od 1 do 1000 (ms)). Na Buttonclick uruchamiam go z timeline.play (), i w do_stuff () zatrzymuję go, gdy obliczenia są wykonywane z timeline.stop ().

Mam również funkcję zmiany czasu oczekiwania (nawet gdy działa):

public void changewaittime() {

if (!(timeline.getStatus() == Animation.Status.RUNNING)) {
keyframe = new KeyFrame(Duration.millis(waittime), event);
timeline = new Timeline(Timeline.INDEFINITE, keyframe);
} else {
timeline.stop();
keyframe = new KeyFrame(Duration.millis(waittime), event);
timeline = new Timeline(Timeline.INDEFINITE, keyframe);
timeline.play();
}
}

A teraz mój problem polega na tym, że Oś czasu działa tylkojeden raz, a nie ciągle, nie wprowadza nawet ponownie do_stuff (), tylko jeśli ponownie wywołasz funkcję timeline.play () Nawet bezpośrednie wywołanie timeline.setCycleCount (Timeline.INDEFINITE) nie pomaga.

Coś, co przegapiłem?

Edycja: Nie udało mi się znaleźć mojego błędu, więc przepisałem cały GUI, a teraz działa.

Odpowiedzi:

0 dla odpowiedzi № 1

W konstruktorze osi czasu ustawiasz liczbę klatek na sekundę za pomocą stałej przeznaczonej do liczenia cykli.

Posługiwać się http://docs.oracle.com/javafx/2/api/javafx/animation/Animation.html#setCycleCount(int).


-2 dla odpowiedzi nr 2

Rozwiązałem problem, przepisując pełny GUI i Oś czasu. Nie wiem, dlaczego wcześniej nie działało, ale teraz działa.