를 실행 할 때 그 값을 설정하고 있는지 확인하십시오. 따라서 "MyXYZThread"가 스레드의 이름을 바꾸지 못하는 시스템의 다른 SwingWorker에서 재사용되는 경우 스레드의 이름을 잘못 지정하면 오해의 소지가 있습니다.
예외를 throw 할 때 이름을 포함하고 그 이름을 포함하도록 SwingWorker를 확장합니다.
참고 : 호출자가 예외 처리를 담당하게하지는 않겠지 만 SwingWorker 계약을 변경하지 않고 호출자가 처리 할 수있는 방법이 표시되지 않습니다.
private static abstract class MySwingWorker<X, Y> extends SwingWorker<X, Y>
{
private final String taskName;
public MySwingWorker(String name)
{
this.taskName = name;
}
public String getTaskName() {
return taskName;
}
}
사용법 :
new MySwingWorker<Object,Object>("my task") {
protected Object doInBackground() {
try {
return someCall();
}
catch(Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,
"Exception in " + getTaskName(), e);
throw e;
}
}
}.execute();
좋은 답변입니다. 단순하고 직접적. –