2010-07-29 7 views
0

netbeans에서 응용 프로그램을 만들고 있는데, 주어진 순간에 프로그램에서 무슨 일이 벌어지고 있는지 알려주는 상태 레이블을 갖고 싶습니다. 엄청난 양의 코드가 있지만, 여기에는 꽤 많이 있습니다. 단지 statusLabel이 이미 프로그램에 들어있는 레이블이고 각 함수는 몇 초가 걸리는 고가의 함수 인 것처럼 가장합니다.레이블을 업데이트하여 새 텍스트를 표시하는 방법은 무엇입니까?

statusLabel.setText("Completing Task 1"); 
System.out.println("Completing Task 1"); 
this.getFrame().repaint(); //I call this function and the two functions below it but the label still does not change. 
statusLabel.updateUI(); //Doesn't seem to do much. 
statusLabel.revalidate(); //Doesn't seem to do much. 
this.completeTask1(); 
statusLabel.setText("Completing Task 2"); 
System.out.println("Completing Task 2"); 
statusLabel.revalidate(); 
this.getFrame().repaint(); 
... 

UI가 4 가지 작업을 완료 할 때까지 계속됩니다. 전체 프로세스 동안 레이블은 모든 단일 작업이 완료 될 때까지 업데이트되지 않으며 "작업 4 완료"라고 표시됩니다. System.out.println 호출은 완벽하게 작동합니다. 기본적으로 레이블에 새 텍스트가 표시되도록하려면 어떻게해야하는지 궁금합니다.

+0

이렇게하려면 멀티 스레딩이 필요합니다. 완료 될 때까지 GUI가 업데이트되지 않을 유일한 스레드가 "백그라운드"에서 실행중인 다른 코드를 실행하는 데 사용되기 때문에 레이블이 업데이트되지 않습니다. 멀티 스레딩이 필요할 때 사용되지 않을 때 자주 발생하는 문제. 다음은 [Concurrency] (http://docs.oracle.com/javase/tutorial/essential/concurrency/)에 대한 Java Oracle 튜토리얼입니다. 문제를 해결하기 위해 알아야 할 멀티 스레딩에 대한 모든 것을 갖추고 있으며 완벽합니다. 프로그래밍의 더 어렵고 필요한 개념 중 하나에 대해 학습하기 시작합니다. http://docs.oracle.com/j – CODe

답변

1

코드의 대답은 맞다, 그러나 나는 SwingWorker 클래스와 함께 가고 싶어요 :

추상 클래스는 전용 스레드에서 GUI와 교환하는 시간이 걸리는 작업을 수행 할 수 있습니다.

귀하의 문제에 적합한 도구입니다.

관련 문제