Как отложить выполнение задачи в JavaFX - PullRequest
0 голосов
/ 16 октября 2018

В моей программе есть следующая функция, которая отлично работает.Я только обновляю некоторый текст на 3 метках в моем графическом интерфейсе, как показывает код, и это работает нормально.Однако я хочу поставить задержку / паузу в 1 секунду после каждого обновления метки, чтобы я мог обновлять label1, затем через 1 секунду обновится label2 и через 1 секунду снова label3 обновится.Я пытался использовать нить.Буду очень признателен, если кто-нибудь сможет мне помочь.

Спасибо.

private void 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 голосов
/ 16 октября 2018

Если вы хотите выполнить привязку с задержкой в ​​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();
...