2013-06-22 56 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而不是 或除定時器外。

相關問題