多个 catch 子句,每个子句都有自己的消息框

multiple catch clauses with each having its own message box

有人能告诉我为什么即使异常是 IO- 或 JDOMException 也只显示 catch 子句 FileNotFoundException 中的消息框吗?为什么 java 会忽略这些 catch 子句中的相关消息框? 谢谢!

public void SetWurzel() {
    builder = new SAXBuilder();
    xmlFile = new File(Pfad);
    try {
        document = (Document) builder.build(xmlFile);
    } catch (FileNotFoundException e) {
        JOptionPane
                .showMessageDialog(
                        null,
                        "Die Datei konnte nicht gefunden werden. Bitte überprüfen Sie den Pfad"
                                + " auf Korrektheit.");
    } catch (IOException e) {
        JOptionPane
                .showMessageDialog(
                        null,
                        "Bitte prüfen Sie die Zugriffsrechte auf Ihre Datei und geben "
                                + "Sie diese gegebenenfalls frei. ");
    } catch (JDOMException e) {
        JOptionPane
                .showMessageDialog(
                        null,
                        "Bitte Prüfen Sie die Struktur der einzulesenden XMLDatei auf Fehlern"
                                + " und fehlende Elemente.");
    }
    Wurzel = document.getRootElement();
}

FileNotFoundExceptionin fact, an IOException(它是一个子类)。因此,因为您首先指定了 FileNotFound catch 块,所以如果未找到该文件并抛出该异常,它会首先被捕获。

一旦异常被该 catch 块处理,try/catch 块完成,您的代码继续。

注意 catch 块不会 'cascade'...完成第一个 catch 块不会启动下一个 catch 块.....只有第一个可以处理异常的 catch 块会被执行。

因此,如果存在未找到 FileNot 的 IOException,则第二个 catch 块将 运行。

如果 XML 解析或文档结构出现异常,则 JDOMException 处理程序将 运行.

只有其中一个会 运行 出现异常时...这就是 Java 的工作方式。