我正在使用套接字的Android应用程序。我有一个名为initializeStreams()的函数,它打开套接字并尝试连接。如果无法建立连接,则此函数将抛出ConnectException。但由于某种原因,在调用具有ConnectException的catch块的initializeStreams()的代码中,日志打印出自己的异常堆栈跟踪而不是去catch块。永远不会到达catch块,即使抛出了确切的异常。这是代码:
试块:
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 :(得分:3)
您需要将您的异常链接到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();
}
答案 1 :(得分:2)
ConnectException
扩展了SocketException
,而IOException,
又扩展了IOException
,因此initializeStreams()
中ConnectException.
的捕获量会抓住try/catch
我会删除该{{1}} {{1}}完全阻止:没有连接就没有多少从这个方法中回归。