4

ソケットを使用する Android アプリケーションに取り組んでいます。ソケットを開いて接続を試みる initializeStreams() という関数があります。接続を確立できなかった場合、この関数は ConnectException をスローします。しかし、何らかの理由で、ConnectException の catch ブロックを持つ initializeStreams() を呼び出すコードでは、ログは catch ブロックに移動する代わりに、例外の独自のスタック トレースを出力します。正確な例外がスローされていても、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();
    }

私はこれを理解できないので、どんな助けでも大歓迎です。

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

ConnectExceptionextendsはextendsSocketExceptionであるIOException,ため、IOExceptionin initializeStreams()catchのcatchは、ConnectException.そのブロックを完全に削除しtry/catchます。接続なしでこのメソッドからクリーンに戻ることにはあまり意味がありません。

于 2012-07-03T15:48:26.387 に答える