如何在JavaFX中延迟任务的执行

时间:2018-10-15 21:40:22

标签: javafx-2

我的程序上具有以下功能,可以完美运行。如代码所示,我只更新了GUI上3个标签上的一些文本,并且工作正常。但是,我想在每个标签更新后放置1秒的延迟/暂停,以便我可以先更新label1,然后在1秒后label2更新,然后在1秒后再次label3更新。我试图使用线程。如果有人可以帮助我,我将不胜感激。

谢谢。

私有无效displayData() {

DataHelper datahelper = new DataHelper(data1, data2, data3);

myThread = new Service<DataHelper>()
{
    @Override
    protected Task<DataHelper> createTask()
    {
        return new Task<DataHelper>()
        {
            protected DataHelper call() throws Exception
            {
                return new DataHelper(myData1, myData2, myData3);
            }
        };
    }
};

myThread.setOnSucceeded(event ->
{
    label1.textProperty().unbind();
    labe2.textProperty().unbind();
    label3.textProperty().unbind();
});

label1.textProperty().bindBidirectional(datahelper.text1Property());
label2.textProperty().bindBidirectional(datahelper.text2Property());
label3.textProperty().bindBidirectional(datahelper.text3Property());

myThread.restart();

}

1 个答案:

答案 0 :(得分:0)

如果要在每次执行中延迟1秒进行绑定,则可以使用时间轴。

Timeline tl = new Timeline(new KeyFrame(Duration.seconds(1), ae -> lbl1.textProperty().bindBidirectional(data.text1Property())),
                    new KeyFrame(Duration.seconds(2), ae -> lbl2.textProperty().bindBidirectional(data.text2Property())),
                    new KeyFrame(Duration.seconds(3), ae -> lbl3.textProperty().bindBidirectional(data.text3Property())));
tl.setCycleCount(1);
tl.play();