2013-06-22 54 views
0

我有一个逐步显示某个迭代过程的GUI。 我希望它让一步,显示了步,等待1秒,然后重复,...java:为什么等一段时间让我的程序不能顺序执行?

代码:

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

会发生什么,不过,是没有打印,直到加全所有睡眠呼叫的时间都会通过,然后所有步骤都会立即打印。 如何顺序执行流程?

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

+1

因为您在UI调度线程中调用'sleep'。可能的重复[我应该在java swing程序中使用thread.sleep?](http://stackoverflow.com/questions/9194721/where-should-i-use-thread-sleep-in-a-java-swing -program) –

+0

这是一个Swing GUI应用程序吗?你如何显示该步骤? –

回答

2

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

请注意swingWorker只会执行一次。如果要执行更多的时候你一定要来看看的javax.swing.Timer

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

相关问题