我希望在 Swing 应用程序中以有意义的方式处理异常。
下面是里面的一个actionPerformed
方法。这UiUtils#showError
显示一个 JOptionPane,其中带有一个显示/隐藏堆栈跟踪的按钮。 ApplicationException 是一个自定义类,用于将低级异常转换为用户可以理解的内容。
一个问题是我不知道如何处理NullPointerException
如果用户没有选择文件中的文件,则会向上传播JFileChooser
在此代码之前。这exportData
方法有目的地检查条目是否为 null,因此不会进行任何文件处理。
另外,这似乎是包装低层的一个好方法Exception
(例如来自数据层)。我想修改ApplicationException
保留一个实例而不是在showError
method.
最后,有一件事困扰着我,那就是一些异常可能同时发生。我不知道如何处理这个问题,所以我愿意接受任何建议。
try {
dataService.exportData(list, selectedFile);
} catch (IOException e) {
UiUtils.showError(new ApplicationException("Input/Ouput error"), e );
} finally {
if( list == null){
UiUtils.showError(new ApplicationException("No data to export"), null );
}
if( selectedFile == null ){
UiUtils.showError(new ApplicationException("No file selected"), null );
}
}
要捕获 NullPointerException(或任何与此相关的 RuntimeException)以及 IOException,只需捕获最常见的异常类型:
try {
dataService.exportData(list, selectedFile);
} catch (Exception e) {
UiUtils.showError(new ApplicationException(e), e );
} finally {
...
}
您可以将原始异常包装到 ApplicationException 中,方法是将其作为“原因”参数添加到构造函数中,例如:
public class ApplicationException extends RuntimeException {
public ApplicationException(Exception cause) {
super(cause);
}
...
}
然后,原始异常始终可以通过 getCause() 方法获得。
如果您的程序不是多线程的,我不会担心并发异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)