2012-07-08 76 views
1

我正在處理JaudioTagger API來操縱MP3文件,我不得不一遍又一遍地重複以下異常......我想的是有一個通用的異常處理程序,我可以用一個標誌來轉發每個異常編號和通用方法將通過具有不同的開關情況來處理它?可能嗎 ?我真的很感激,如果有人可以給方法簽名或方法來調用它Java通用異常

} 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); 
      } 
+0

你這是什麼是指「重複例外」? – Behe 2012-07-08 21:23:41

回答

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); 
    } 
} 

請參閱 「Catching multiple exceptions」。

0

這個答案已經過時,從Java 7開始。使用多約翰瓦特在他的答案顯示。

我建議使用

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); 
    } 
}