Поток, используемый SwingWorker, взят из Executors.defaultThreadFactory, что означает, что он из пула. Таким образом, наименование потока может вводить в заблуждение, если «MyXYZThread» повторно используется для другого SwingWorker в системе, которая не может переименовать поток.
Я бы расширил 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();