【发布时间】:2012-07-04 01:32:28
【问题描述】:
我正在开发一个使用套接字的 Android 应用程序。我有一个名为 initializeStreams() 的函数,它打开套接字并尝试连接。如果无法建立连接,此函数将引发 ConnectException。但由于某种原因,在调用具有 ConnectException 捕获块的 initializeStreams() 的代码中,日志打印出它自己的异常堆栈跟踪,而不是转到捕获块。即使抛出了确切的异常,也永远不会到达 catch 块。代码如下:
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();
}
我无法弄清楚,所以任何帮助将不胜感激。
【问题讨论】:
-
我们无法弄清楚为什么会发生这种情况,因为您在代码中发布的唯一套接字操作不会引发 ConnectException。发布其余代码。
-
是的。打印套接字初始化之前的日志,然后打印 ConnectException 堆栈跟踪,而不是 catch 块中的日志。 initializeStreams() 是唯一抛出 ConnectException 的函数,第一个代码 sn-p 是唯一调用它的地方。
-
什么意思?该套接字操作是引发异常的操作,它在堆栈跟踪中这么说,并且它是目前我的程序中唯一的套接字操作。
-
我在这里看不到任何抛出 ConnectException 的方法:docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html
-
@Th0rndike ConnectException 扩展了 SocketException。
标签: java android sockets exception connectexception