如何在不延迟界面的情况下延迟gui的操作?

时间:2014-01-30 20:14:35

标签: java swing user-interface delay

我正在创建一个闪存卡程序,并希望在问题弹出与答案之间有几秒钟的延迟。我一直在尝试使用thread.sleep ......

question.setText(questionString);

if(timed.isSelected())
{
     delay();//uses thread.sleep
}

answer.setText(questionString);

睡眠在问题出现在gui之前执行,因此它会立即重新出现问题和答案。问题和答案只是JPanels,timed是JRadioButton。

所以对于实际的问题,无论如何我可以推迟出现的答案,以便它很好地流动?就像我在cmd提示符中使用println一样。

1 个答案:

答案 0 :(得分:3)

Thread.sleep实际上会暂停运行它的线程。当您在事件调度线程上运行时,这可能是危险的,因为您在睡眠运行时基本上停止了任何GUI更新,以便您设置文本,然后停止GUI更新,直到您使用答案设置文本 - 问题可以永远不会被吸引。

对于计时的非阻塞替代方案,请查看查看How to use Swing Timers类的javax.swing.Timer。此类允许您指定延迟,以及在延迟过后完成的操作,而不会暂停您的线程。