如何在不阻塞 UI 的情况下暂停 Java 指定时间? [复制]
Posted
技术标签:
【中文标题】如何在不阻塞 UI 的情况下暂停 Java 指定时间? [复制]【英文标题】:How to pause Java for a specified time without blocking UI? [duplicate] 【发布时间】: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();
【问题讨论】:
【参考方案1】:将您的 **--<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 指定时间? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在不阻塞 UI 的情况下正确使用 MagicalRecord 从 Web 服务导入数据
Flutter:如何在不阻塞 UI 的情况下异步地从资产中读取文件