2012-01-10 82 views
1

我有這種方法調用下面的方法,我有意提供一個錯誤的端口號來連接URL。 但令我吃驚的是,產生的異常被捕獲到第一個方法catch塊 爲什麼它沒有在executeData方法的catch塊內處理?Java:爲什麼在第二個方法catch塊中沒有捕獲異常

**1st Method** 
public APIResponse execute(Request request, Class<? extends Response> responseClass) { 
     try { 
     String xmlResponse = executeData(request); 
        // some code 
     return response; 
     } 
     catch (Exception ex) { 

      return new Response(ErrorCode.SYSTEM_ERROR); 
     } 
    } 

2nd Method 
public String executeData(Request request) throws IOException { 
     URL url = null; 
     URLConnection urlc = null; 
     try { 
      url = new URL("http://localhost:80870/"); 
      urlc = url.openConnection(); 

     } 
     catch (Exception ex) { 
     ex.printStackTrace(); 
**// This is not being executed .** 
     } 

          // Some code 
        // Some code 
     return xmlResponse; 
    } 
+0

你絕對確定沒有執行數據異常處理程序中的g會在您看到執行代碼的結果之前拋出異常? – 2012-01-10 11:59:47

+0

如果你從第二種方法中移除了'throws IOException',它會起作用嗎? – Viruzzo 2012-01-10 12:09:56

+0

@Viruzo,沒有幫助,如果我刪除拋出 – Kiran 2012-01-10 12:20:27

回答

1

這可能是因爲你的行

// some code 

產生被捕捉另一個異常。你的第二種方法不會拋出任何異常,我沒有看到任何錯誤。

connection.connect(); 

會拋出異常。

你也可以檢查狀態:

int responseCode = connection.getResponseCode(); 
if (responseCode != 200) { 
    // Not OK. 
} 
+0

它給urlc.getOutputStream()錯誤。謝謝 。 – Kiran 2012-01-10 12:22:49

0

我猜例外

//一些代碼 //一些代碼

catch塊後executeData發生

+0

爲什麼我們應該打擾,因爲它應該只在早期的catch塊中處理 – Kiran 2012-01-10 12:17:13

+0

對不起,但如果它之後發生,怎麼能在之前的catch塊中處理?你怎麼知道在executeData的try塊發生異常? – ichaki5748 2012-01-10 12:27:55

+0

問題來了,因爲我希望url.openConnection()會給出錯誤,但不會在urlc.getOutputStream()時給出錯誤。無論如何thnks尋求幫助。 – Kiran 2012-01-10 12:38:07

相關問題