2013-06-22 2 views
0

특정 반복 프로세스를 단계별로 표시하는 GUI가 있습니다. 나는 그것이 한 단계를 구성하는 단계를 표시, 1 초를 기다린 반복 할 ...java : 잠시 기다려야 내 프로그램이 순차적으로 실행되지 않는 이유는 무엇입니까?

코드 :

어떻게됩니까
while (! finished()) { 
    advance(); // make and display one step 
    try { 
     Thread.sleep(1000); 
    } 
    catch (InterruptedException e) {  
    } 
} 

하지만, 전체가 추가 될 때까지 아무것도 인쇄되지 않습니다이다 모든 수면 통화 시간이 지나면 모든 단계가 한 번에 인쇄됩니다. 실행 흐름을 순차적으로 만들 수 있습니까?

참고 : 수면 호출을 매우 길고 쓸모없는 루프로 바꾸려고 시도했지만 동작이 동일했습니다.

+1

UI 디스패치 스레드에서 'sleep'을 (를) 호출하기 때문에. [자바 스윙 프로그램에서 thread.sleep을 어디에 사용해야합니까?] (http://stackoverflow.com/questions/9194721/where-should-i-use-thread-sleep-in-a-java-swing) -program) –

+0

스윙 GUI 앱인가요? 단계를 어떻게 표시합니까? –

답변

2

이 작업은 별도의 스레드에서 수행해야합니다. 당신은 당신의 GUI를 동결하고 있습니다. SwingWorker을 사용할 수 있습니다. 여기에 멋진 기사가 있습니다 Why do we need SwingWorker?

swingWorker는 한 번만 실행됩니다. 당신이 더 많은 시간을 실행할 경우에 당신은 스윙 타이머의 태스크가 이벤트 발송 스레드에서 수행하는 것도 javax.swing.Timer

참고 살펴해야합니다. 즉, 작업이 구성 요소를 안전하게 조작 할 수 있지만 은 작업이 빠르게 실행되어야 함을 의미합니다. 작업에 이 실행되는 데 시간이 오래 걸리는 경우 대신 또는 타이머 외에 SwingWorker를 사용하는 것이 좋습니다.

관련 문제