如何在javaFX中正确执行Thread.sleep()?

时间:2018-04-17 14:43:04

标签: java javafx sleep

我正在编写一个简单的代码,用javaFX显示表的内容。 我希望每次显示新内容时程序都会暂停。

for(int i = 0; i < table.size(); i++){
    label.setText(table[i]);
    Thread.sleep(2000); // The program stops for 2 seconds 
}

问题是,Thread.sleep()不能像计划那样工作。实际上,程序在显示内容之前暂停。

如何更正此问题?

1 个答案:

答案 0 :(得分:1)

您应该使用Timeline执行此任务。它允许您在给定的时间间隔内重复触发在应用程序线程上运行的事件,而不会通过阻止JavaFX应用程序线程来阻止场景的布局/呈现。

label.setText(table[0]); // set text for the first time

Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(2), new EventHandler<ActionEvent>() {

    private int i = 1;    

    @Override
    public void handle(ActionEvent event) {
        label.setText(table[i]); // display next string
        i++;
    }
}));
timeline.setCycleCount(table.length - 1);
timeline.play();