2013-04-13 47 views
2

編譯我的程序時,我得到這個錯誤:我的代碼請求異常被拋出,但是當我做,它說,它不應該被拋出

./GUI/mainWindow.java:30: error: unreported exception Exception; must be caught or declared to be thrown 
      clientUI.initClientUI(); 
          ^
1 error 

但我的方法實際上拋出異常:

public final void initClientUI() throws Exception { 

但是,如果我刪除「拋出異常」部分,嘗試編譯,然後再次添加它,程序編譯成功。任何人都可以解釋爲什麼會發生?


編輯
如果我添加 「拋出異常」 給我打電話

public void actionPerformed(ActionEvent e) throws Exception { //<-----add Exception there 
      ClientWindow clientUI = new ClientWindow(); 
      clientUI.initClientUI(); 

的方法我得到這個錯誤:

./GUI/mainWindow.java:28: error: actionPerformed(ActionEvent) in <anonymous GUI.mainWindow$1> cannot implement actionPerformed(ActionEvent) in ActionListener 
     public void actionPerformed(ActionEvent e) throws Exception { 
        ^
    overridden method does not throw Exception 
1 error 
+0

至於最後一個問題(在EDIT)編譯器說,這一切:「重寫方法不拋出異常」。即如果你重寫了一些方法,那麼重寫方法的**方法簽名不能改變**。 – informatik01

回答

2

按說

public final void initClientUI() throws Exception { 

您正在告訴編譯器initClientUI()被允許拋出ExceptionException的任何子類。由於選中了Exception,因此調用initClientUI()的任何方法都必須捕獲Exception或將其列入其throws子句中。我想推薦閱讀tutorial on exceptions

1

你的問題不是你的方法的聲明,你的問題是當你調用它的時候。當你聲明這樣的方法

public final void initClientUI() throws Exception 

你的編譯器會知道它會拋出異常。這很好,到目前爲止沒有問題。但是當你調用它時,你必須處理這個異常。

所以,當你說

client.initClientUI() 

你的編譯器說:「這個方法拋出一個異常,懇求處理它。」現在你有兩個選擇:

try { 
    client.initClientUI() 
} 
catch(Exception e) { 
    System.out.println(e); 
} 

或聲明的方法調用client.initClientUI()throws Exception

0

throws Exception表示您將其投入調用方法,並且調用方法應該負責管理exception,方法是再次拋出它或使用try catch捕獲它。

你應該做這種方式

public void actionPerformed(ActionEvent e) { 
      try{ 
       ClientWindow clientUI = new ClientWindow(); 
       clientUI.initClientUI(); 
      }catch(Exception e){ 
       // handle exception 
      } 
相關問題