2011-12-24 7 views
3

저는 백그라운드에서 계산을 수행하는 SwingWorker를 가지고 있습니다.이 작업은 재정의 된 doInBackground() 메서드에 있습니다. 따라서 계산을 시작하려면 execute() 메서드를 사용하십시오. 어떻게 완료되면이 계산 결과를 얻을 수 있습니까?SwingWorker 결과 얻기

+0

몇 가지 코드를 공유하십시오! –

+0

이제 코드가 작성되지 않았습니다. 이제 SwingWorker와 내 모델 및 애플리케이션의 MVC 구조를 연결하는 방법에 대해 생각해 보겠습니다. – dizpers

답변

2

done 메서드를 재정 의하여 - 작업이 완료되면이 메서드가 호출됩니다. How do I use SwingWorker in Java?

당신은 결과를 검색 할 get를 호출 할 수 있지만, 노동자 그렇게하지 않을 경우 근로자가 완료 될 때까지 스레드가 차단됩니다 Improve Application Performance With SwingWorker in Java SE 6

는 또한 다른 SO 질문 참조 : 오라클은 여기에 포괄적 인 튜토리얼이 있습니다. 즉, 작업 발송자가 완료되지 않은 경우 GUI (Event Dispatch Thread)에서 get으로 전화하면 응답이 없습니다. 작업자가 완료했는지 확인하려면 isDone으로 전화하십시오.

마지막으로, 작업 완료 시점을 포함하여 작업자 진행 상태를 알리기 위해 속성 변경 리스너를 첨부 할 수 있습니다. 내가 게시 한 첫 번째 링크는 그 예입니다.

+0

thx! 나는 그것을 시도 할 것이다! 거기에 MVC에서 SwingWorker를 사용하는 몇 가지 일반적인 패턴이 있습니까? – dizpers

+1

@dizpers, yes - 스윙 작업자와 작업을 UI에서 분리 할 수 ​​있습니다. 작업자가 청취자를 첨부하고 작업자가 완료되면 UI를 업데이트하십시오. 또한 진행 상황을 사용자가 알 수 있도록 UI를 유지하려면 'PropertyChangeEvent'를 실행하여 중간 진행 상황을 인식 할 수 있습니다. – Paul

+0

get()은 공식적으로 문서화되어 있습니까? –

4

herehere과 같이 done() 및/또는 process()을 무시할 수 있습니다.

+0

정확하게 return 문이 필요합니다. 내 작업자의 doInBackground 메서드를 호출하면 어떻게됩니까? – dizpers

+2

그냥 실행되어 EDT를 차단할 수 있습니다. 대신, 예제에서 볼 수 있듯이 worker를 인스턴스화하고'execute() '한다. – trashgod

+0

@dizpers _dizpers _ 무슨 일이 일어 났을 까, 그냥 doInBackground_ hell이 ​​느슨한 것을 깨뜨린다 ;-) 언제나처럼 ** 무언가를 잘못 했음 ** - java 문서와 동시성 튜토리얼 장에서 폭넓게 설명 된 사용법을 고수하라. 스윙 – kleopatra