2012-03-02 6 views
0

나는 다음과 같은 코드를 가지고 :버튼을 클릭하면 계속하기 전에 SwingWorker가 끝날 때까지 기다리는 방법은 무엇입니까?

public class FileLoader extends SwingWorker(Void, Void) { 
    @Override 
    private Void doInBackground() { 
     loadFiles(); 
    } 
} 

public class LogInPage { 

    private FileLoader fileLoader = new FileLoader(); 

    public LogInPage() { 
     fileLoader.execute(); 
    } 

    loginButtonActionPerformed(ActionEvent evt) { 
     //wait for files to finish loading 
     //while displaying a waiting cursor 

     showMainForm(); 
    } 
} 

내 질문은 다음과 같습니다 전에 (모래 시계 커서와 진행 표시 줄을 표시하면서)

버튼을 클릭 후, 나는 모든 파일이 처음로드 할 할 것 주요 폼을 보여줍니다.

이전에 Thread의 join()으로이 작업을 수행했지만 SwingWorker와 동일한 작업을 수행 할 수 없었습니다.

done()을 재정의하고 리스너를 구현하는 방법에 대해 읽었지만 여기서는 적용 할 수 없습니다.

어떤 도움이 필요합니까?

감사합니다.

답변

0

당신이 말하는 것과 반대로 생각하면, 실제로 SwingWorker의 done() 메소드를 사용할 수 있다고 생각합니다. execute()하기 전에 버튼을 비활성화하고 바쁜 애니메이션을 시작한 다음 done() 메소드에서 프로그램을 계속하려면 무엇이든지해야합니다. 그게 바로 다음과 같습니다 :-)

또한 진행 막대 막대 이벤트를 보내고 받으려면 SwingWorker.publish()와 process()를 봐야합니다.

도 참조하십시오. How do I wait for a SwingWorker's doInBackground() method?

관련 문제