Я использую временную шкалу в JavaFX для обратного отсчета Label
:
timeline.setCycleCount(6);
timeline.play();
И я хочу вернуть значение после окончания временной шкалы:
return true;
Однако, похоже, что значение возвращается сразу, а временная шкала идет параллельно. Как я могу дождаться окончания обратного отсчета на временной шкале, а затем вернуть значение, не блокируя временную шкалу?
EDIT:
Чтобы было понятнее, я уже попробовал:
new Thread(() -> {
timeline.play();
}).start();
while(!finished){ // finished is set to true, when the countdown is <=0
}
return true;
(Это решение не обновляет обратный отсчет.)
РЕДАКТИРОВАТЬ 2:
Вот минимальный, полный и проверяемый пример:
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Duration;
public class CountdownTest extends Application {
private Label CountdownLabel;
private int Ctime;
@Override
public void start(Stage primaryStage) {
CountdownLabel=new Label(Ctime+"");
StackPane root = new StackPane();
root.getChildren().add(CountdownLabel);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Countdown Test");
primaryStage.setScene(scene);
primaryStage.show();
Ctime=5;
if(myCountdown()){
CountdownLabel.setText("COUNTDOWN FINISHED");
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
public boolean myCountdown(){
final Timeline timeline = new Timeline(
new KeyFrame(
Duration.millis(1000),
event -> {
CountdownLabel.setText(Ctime+"");
Ctime--;
}
)
);
timeline.setCycleCount(6);
timeline.play();
return true;
}
}
Вы можете видеть, что сначала отображается «COUNTDOWN FINISHED» и идет обратный отсчет до 0 вместо начала обратного отсчета и обратного отсчета до «COUNTDOWN FINISHED».