如何在不阻止UI的情况下暂停指定时间的Java? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不阻止UI的情况下暂停指定时间的Java? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我想这已经被覆盖了,但我没有找到真正解决我问题的答案。在此代码摘录中,我想显示对按钮单击的反应(在lblMessage中设置文本),等待一秒钟,然后显示另一个图像。

在标记为“等待1000毫秒”的部分中,我尝试了Thread.sleep(),以及计算经过的系统时间。但是,在这两种情况下,lblMessage仅在等待时间之后填充。

我遇到了Timer,但我无法弄清楚如何使用它的语法(特别是需要输入的任务)。

在此先感谢您的帮助!

public void answerButtonClicked(ActionEvent event) {

    endTime = System.nanoTime();
    elapsedTime = (endTime - startTime);
    String answerTime = String.format("%.2f", (elapsedTime/1000000000));

    Button btnAnswer = (Button)event.getSource();
    String answer = btnAnswer.getId();      
    String correctAnswer = mpScenes.get(model.getNextScene(round-1));

    if (answer.equals(correctAnswer)) {
        lblMessage.setText("Richtig (" + answerTime + "s)");
    } else {
        lblMessage.setText("Falsch (" + answerTime + "s)");
    }

    **--<wait 1000 ms>--**

    if (round < numberOfRounds) {
        round++;
        setNewMainImage(round);
    } else {
        endOfGame();
    }
}
答案

用这样的东西替换你的**--<wait 1000 ms>--**

Timer timer = new Timer(1000, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (round < numberOfRounds) {
            round++;
            setNewMainImage(round);
        } else {
            endOfGame();
        }

    }
});

timer.start();

javax.swing.Timer允许您延迟稍后将在swing UI调度线程中执行的某些操作。

以上是关于如何在不阻止UI的情况下暂停指定时间的Java? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 如何在不阻止UI的情况下计算包含未来的繁重任务?

如何在不阻塞 UI 的情况下创建 UIView

如何在不破坏 UI 的情况下将搜索放在另一个线程中?

在不禁用用户交互的情况下阻止 UIWebView 输入显示 UIKeyboard

如何在不删除的情况下暂停 azure webjob?

如何在不崩溃应用程序的情况下暂停/睡眠()功能?