4

我正在开发一个使用套接字的 Android 应用程序。我有一个名为 initializeStreams() 的函数,它打开套接字并尝试连接。如果无法建立连接,此函数将引发 ConnectException。但由于某种原因,在调用具有 ConnectException 捕获块的 initializeStreams() 的代码中,日志打印出它自己的异常堆栈跟踪,而不是转到捕获块。即使抛出了确切的异常,也永远不会到达 catch 块。这是代码:

尝试块:

try {
        initializeStreams();

            /* other code */

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

    }

初始化流():

    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();
    }

我无法弄清楚这一点,所以任何帮助将不胜感激。

4

2 回答 2

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();
}
于 2012-07-03T15:29:34.233 回答
2

ConnectException扩展SocketException,而后者又扩展IOException,,因此捕获 for IOExceptionininitializeStreams()捕获ConnectException.我将完全删除该try/catch块:在没有连接的情况下从该方法干净地返回没有多大意义。

于 2012-07-03T15:48:26.387 回答