在哪里放置try catch块

时间:2016-03-16 20:17:17

标签: java return try-catch controls

我有一个按钮,它将一个文件列表放入一个数组中,然后为每个文件调用一个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

2 个答案:

答案 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方法上声明可能的例外情况。