1

I am dealing with JaudioTagger API to manipulate MP3 files, I have to repeat the following exceptions over and over again... I was thinking of having a generic exception handler where I could forward each exception maybe with a flag number and the generic method would be deal with it by having different switch cases maybe ? Is it possible ? I would really appreciate if someone could give the method signature or a way to call it

} catch (CannotReadException ex) {
                Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ReadOnlyFileException ex) {
                Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InvalidAudioFrameException ex) {
                Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, ex);
            } catch (TagException ex) {
                Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, ex);
            }
4

2 に答える 2

5

JDK 7 より前のバージョンでは、ユーティリティ関数を記述して、各 catch ブロックから呼び出すことしかできません。

private void handle(Exception ex) {
    Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, ex);
}

private void someOtherMethod() {
    try {
        // something that might throw
    } catch (CannotReadException ex) {
        handle(ex);
    } catch (ReadOnlyFileException ex) {
        handle(ex);
    } catch (IOException ex) {
        handle(ex);
    } catch (InvalidAudioFrameException ex) {
        handle(ex);
    } catch (TagException ex) {
        handle(ex);
    }
}

JDK 7 以降では、マルチキャッチを使用できます。

private void someOtherMethod() {
    try {
        // something that might throw
    } catch (CannotReadException | ReadOnlyFileException | IOException
             | InvalidAudioFrameException | TagException ex) {
        Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, ex);
    }
}

「複数の例外のキャッチ」を参照してください。

于 2012-07-08T21:23:42.150 に答える
0

この回答は、Java 7以降では廃止されています。JohnWattsが回答に示しているように、マルチキャッチを使用してください。

使用することをお勧めします

try {
    /* ... your code here ... */
} catch (Exception ex) {
    handle(ex);
}

そして、このように処理します:(処理しないOtherExceptionを置き換えるか、削除する必要がありますthrows

private static void handle(Exception ex) throws SomeOtherException {
    if (ex instanceof CannotReadException || ex instanceof ReadOnlyFileException) {
        Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, ex);
    } else if (ex instanceof SomeOtherException) {
        throw (SomeOtherException) ex;
    } else if (ex instanceof RuntimeException) {
        throw (RuntimeException) ex;
    } else {
        throw new RuntimeException(ex);
    }
}
于 2012-07-08T21:48:20.037 に答える