java:为什么等待一段时间让我的程序不按顺序执行?

时间:2013-06-22 19:14:53

标签: java wait synchronize

我有一个GUI,可以逐步显示某个迭代过程。 我希望它做一步,显示步骤,等待1秒,然后重复,......

代码:

while (! finished()) {
    advance(); // make and display one step
    try {
        Thread.sleep(1000);
    }
    catch (InterruptedException e) {       
    }
}

但是,在所有睡眠呼叫的整个添加时间过去之前,没有任何内容被打印,然后立即打印所有步骤。 如何顺序执行执行流程?

注意:我尝试用非常长的无用循环替换睡眠调用,行为是一样的。

1 个答案:

答案 0 :(得分:2)

您必须在单独的线程中执行此任务。你冻结你的gui。您可以使用SwingWorker。这里有一篇很好的文章Why do we need SwingWorker?

请注意,swingWorker只会执行一次。如果您想要执行更多时间,还需要查看javax.swing.Timer

  

请注意,Swing计时器的任务是在事件发送中执行的   线。这意味着任务可以安全地操作组件,但是   它还意味着任务应该快速执行。 如果任务可能   需要一段时间才能执行,然后考虑使用SwingWorker而不是   或者除了计时器之外。