0

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

编码:

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

但是,发生的情况是,在所有睡眠调用的整个添加时间过去之前,什么都不会打印,然后一次打印所有步骤。如何按顺序制作执行流程?

注意:我尝试用一​​个非常长的无用循环替换睡眠调用,并且行为是相同的。

4

1 回答 1

2

您必须在单独的线程中执行此任务。你正在冻结你的gui。您可以使用SwingWorker. 在这里你有一篇很好的文章为什么我们需要 SwingWorker?

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

请注意,Swing 计时器的任务是在事件调度线程中执行的。这意味着任务可以安全地操作组件,但也意味着任务应该快速执行。如果任务可能需要一段时间才能执行,则考虑使用 SwingWorker 代替计时器或在计时器之外使用。

于 2013-06-22T19:18:10.370 回答