【问题标题】:How to pause Java for a specified time without blocking UI? [duplicate]如何在不阻塞 UI 的情况下暂停 Java 指定时间? [复制]
【发布时间】:2018-06-05 01:29:57
【问题描述】:

我想这之前已经介绍过,但我没有找到真正解决我问题的答案。 在这段代码摘录中,我想显示对按钮单击的反应(在 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();
    }
}

【问题讨论】:

    标签: java timer wait


    【解决方案1】:

    将您的 **--&lt;wait 1000 ms&gt;--** 替换为以下内容:

    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 调度线程中执行的操作。

    【讨论】:

    • 非常感谢,这行得通!
    猜你喜欢
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2013-09-12
    相关资源
    最近更新 更多