Swing Worker 中优雅的异常处理
2022-09-01 18:04:52
我正在通过 Swing Worker 类在应用程序中使用线程。它工作正常,但我对在try-catch块中显示错误消息对话框有一种不好的感觉。它可能会阻止应用程序吗?这就是它现在的样子:
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
// Executed in background thread
public Void doInBackground() {
try {
DoFancyStuff();
} catch (Exception e) {
e.printStackTrace();
String msg = String.format("Unexpected problem: %s", e
.toString());
//TODO: executed in background thread and should be executed in EDT?
JOptionPane.showMessageDialog(Utils.getActiveFrame(),
msg, "Error", JOptionPane.ERROR_MESSAGE,
errorIcon);
}//END: try-catch
return null;
}
// Executed in event dispatch thread
public void done() {
System.out.println("Done");
}
};
可以使用 Swing Worker 框架以安全的方式完成它吗?覆盖 publish() 方法在这里是一个很好的线索吗?
编辑:
是这样的吗:
} catch (final Exception e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
e.printStackTrace();
String msg = String.format(
"Unexpected problem: %s", e.toString());
JOptionPane.showMessageDialog(Utils
.getActiveFrame(), msg, "Error",
JOptionPane.ERROR_MESSAGE, errorIcon);
}
});
}
调用 get in done 方法会导致两个 try-catch 块,因为计算部分会引发异常,所以我认为这最终会更干净。