2012-07-03 66 views
4

我正在使用套接字的Android應用程序。我有一個名爲initializeStreams()的函數,它打開套接字並嘗試連接。如果無法建立連接,則此函數將引發ConnectException。但由於某種原因,在調用initializeStreams()的代碼中,該代碼有一個用於ConnectException的catch塊,該日誌打印出自己的異常堆棧跟蹤,而不是去catch塊。儘管正在拋出確切的異常,但catch塊永遠不會被觸及。下面的代碼:我有一個ConnectException,由於某種原因未被捕獲

的try塊:

try { 
     initializeStreams(); 

      /* other code */ 

    } catch (ConnectException e) { 
     Log.i(TAG, "caught connect exception"); 

    } 

initializeStreams():

public void initializeStreams() throws ConnectException { 
    try { 
     Log.i(TAG, "Attempting to connect"); 

     requestSocket = new Socket(SERVER_ADDR, PORT); 

        /* other code */ 


    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

我不知道這一點,所以任何幫助,將不勝感激。

+0

由於您在代碼中發佈的唯一套接字操作不會拋出ConnectException,因此我們無法弄清楚爲什麼發生這種情況。發佈其餘的代碼。 – Th0rndike

+0

是的。在打印套接字初始化之前的日誌,然後打印ConnectException堆棧跟蹤,而不是在catch塊中的日誌。 initializeStreams()是拋出ConnectException的唯一函數,第一個代碼片段是唯一調用該函數的地方。 – aakbari1024

+0

你是什麼意思?該套接字操作是引發異常的那個,它在堆棧跟蹤中是這樣說的,而且這是目前我的程序中唯一的套接字操作。 – aakbari1024

回答

2

你需要鏈接你的異常把它扔到catch塊。請嘗試以下操作:

public void initializeStreams() throws ConnectException { 
try { 
    Log.i(TAG, "Attempting to connect"); 

    requestSocket = new Socket(SERVER_ADDR, PORT); 

       /* other code */ 


} catch(ConnectException e){ 
    throw e; 
} 

catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

這個修好了,謝謝! – aakbari1024

+0

奇怪,因爲它甚至沒有在預編輯窗體中編譯。 initializeStreams()的編輯版本包含一個無用的catch/throw序列,完全可以省略。 – EJP

+0

@EJP是的,你是對的。編輯過的版本確實有一個徒勞的try/catch塊。我糾正了我的帖子。感謝您指出錯誤。 –

2

ConnectException延伸SocketException這又延伸IOException,所以漁獲量IOExceptioninitializeStreams()惹人ConnectException.我只想刪除try/catch塊乾脆:沒有太多點從此方法乾淨返回無連接。

相關問題