我有一个GUI,可以逐步显示某个迭代过程。 我希望它做一步,显示步骤,等待1秒,然后重复,......
代码:
while (! finished()) {
advance(); // make and display one step
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
}
}
但是,在所有睡眠呼叫的整个添加时间过去之前,没有任何内容被打印,然后立即打印所有步骤。 如何顺序执行执行流程?
注意:我尝试用非常长的无用循环替换睡眠调用,行为是一样的。
答案 0 :(得分:2)
您必须在单独的线程中执行此任务。你冻结你的gui。您可以使用SwingWorker
。这里有一篇很好的文章Why do we need SwingWorker?
请注意,swingWorker只会执行一次。如果您想要执行更多时间,还需要查看javax.swing.Timer
请注意,Swing计时器的任务是在事件发送中执行的 线。这意味着任务可以安全地操作组件,但是 它还意味着任务应该快速执行。 如果任务可能 需要一段时间才能执行,然后考虑使用SwingWorker而不是 或者除了计时器之外。