【问题标题】:How to properly execute Thread.sleep() in javaFX? [duplicate]如何在 javaFX 中正确执行 Thread.sleep()? [复制]
【发布时间】:2018-09-27 14:21:04
【问题描述】:

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

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

问题是,Thread.sleep() 没有按计划工作。事实上,程序甚至在显示内容之前就暂停了。

我该如何纠正这个问题?

【问题讨论】:

标签: java javafx sleep


【解决方案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();

【讨论】:

    猜你喜欢
    • 2015-05-20
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2015-11-10
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多