我有一个按钮,它将一个文件列表放入一个数组中,然后为每个文件调用一个WwritefiletoDB函数:
.hasOwnProperty
请注意try catchblocks。
writefiletoDB方法有以下代码:
private void BtnImportActionPerformed(java.awt.event.ActionEvent evt) {
// Create array to store filenames
List<String> filenames = new ArrayList<String>();
JTextFiles.append("*** Current Files Processing ***\n");
File dir = new File(TextFieldDirectory.getText());
File[] files = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".pdf");
}
});
for (File file : files) {
if (file.isFile()) {
JTextFiles.append(file.getAbsolutePath() + "\n");
try {
writefiletoDB(file.getAbsolutePath());
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
JTextFiles.append("*** Finished Processing ***\n");
}
注意try catch块,关于第30行。如果它生成错误,则return语句会中断并返回到调用方法BtnImportActionPerformed,并且循环调用下一个文件会产生另一个错误。
我需要一种方法来打破writefiletoDB并停止BtnImportActionPreformed。
有没有办法在BtnImportActionPreformed中处理writefiletoDB异常?或者突破两者。
最好的方法是什么 - 我想让代码更健壮。
由于
的Al
答案 0 :(得分:0)
有多种方法可以解决这个问题,我会根据你的逻辑选择什么。
ksh
的来电者抓住。BtnImportActionPerformed
的for循环,一旦出现异常,你就不在循环中了。请删除for循环中的try / catch。BtnImportActionPerformed
返回成功/失败而不是异常。在基于成功/失败的writefiletoDB
中,您可以退出循环。答案 1 :(得分:0)
将您的示例简化为相关结构,代码正在执行此操作:
void BtnImportActionPerformed() {
for(int i = 0l i < 10; i++) {
writefiletoDB();
}
}
void writefiletoDB() {
try {
doSomething();
} catch (SomeException e) {
return;
}
}
由于在内部方法中捕获并处理异常,因此外部方法无法知道出现任何错误。如果希望外部方法知道发生了异常,请使用与内部方法相同的模式。抓住抛出的异常。像这样:
void BtnImportActionPerformed() {
for(int i = 0l i < 10; i++) {
try {
writefiletoDB();
} catch (SomeException e) {
// do anything else?
return;
}
}
}
void writefiletoDB() throws SomeException {
try {
doSomething();
} catch (SomeException e) {
// log it? something else?
throw e;
}
}
如果外部方法可以执行所有异常处理,您甚至可以完全跳过内部try / catch。您只需要在writefiletoDB
方法上声明可能的例外情况。