SwingWorker
이 내 기본 GUI 내에서 중첩 된 클래스 여야하는지 궁금합니다. 차라리 내 프로그램 논리에서 GUI를 명확하게 유지하기 위해 외부 클래스로 만들 것입니다.SwingWorker는 중첩 클래스 여야합니까?
SwingWorker
클래스를 외부로 만들려고했는데 불행하게도 SwingWorker 클래스에서 내 GUI 필드에 액세스 할 수 없습니다. 레이블이나 SwingWorker의 done()
메서드에서 가져온 것과 같은 속성에 액세스하려고 할 때마다 nullPointer 예외가 발생합니다.
모든 조언을 주시면 감사하겠습니다.
우선 Jeff 대단히 감사합니다! 비록 두 번째 옵션으로 당신을 따라갈 수는 없지만 지금까지 잘 작동합니다. 내 백그라운드 작업 중 하나가 특정 크기 (긴 값)를 계산하므로 내 GUI에서 해당 값을 가져 오는 것이 좋습니다.
getter 및 setter를 사용하도록 제안했지만 불행히도 SwingWorker 클래스에서 구현하는 방법에 대해서는 잘 모릅니다.
나는 이런 식으로 시도 :public void setSize(long totalSize) {
this.totalSize = totalSize;
}
public long getTotalSize() {
return totalSize;
}
세터는 doInBackground()
방법의 끝에서 호출됩니다. 불행히도 내 GUI에서 get()
메서드를 사용할 수 없습니다.
final MySwingWorker w = new MySwingWorker();
Runnable r = new Runnable() {
public void run() {
// do something with w.get()
}
};
w.setRunnable(r);
w.execute();
생성자에 Runnable 개체가 필요하므로 "w"개체 생성이 작동하지 않습니다. 내가 빠진 것이 있습니까? 제발 쉬워 져요, 제가 SwingWorker와 함께 일하는 것은 처음입니다. :) 다시 한 번 도움을 주셔서 감사합니다.
단순히 실행 가능이 아니라 생성자에서 Label을 전달하는 것도 가능합니다. 각각의 작은 액션을위한 새로운 worker 서브 클래스를 정의하는 것은 아마도 과잉 일 것이다. 익명 클래스는 매우 작고 단단히 결합 된 객체를 함께 묶는이 특정 문제를 해결할 때 유용합니다. –
이것은 하나의 유스 케이스인지에 따라 달라집니다. 추상화는 여러 곳에서 작업하는 경우 효과적입니다. 오 얼마나 폐쇄 도움이 될 것입니다. –