0

時々私がストリームを開くとき:

stream = url.openStream();
BufferedReader buffReader = new BufferedReader(new InputStreamReader(stream));

次の例外が発生します。

java.io.IOException: 
    Server returned HTTP response code: 500 for URL: https://...

例外を次のように処理していますが、アプリケーションは終了します。

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

IOEcxeptionなのにキャッチブロックが入らなかった理由を誰かに説明してもらえますか?

どうも

編集(追加コード;-)

private String request(URL url) {

    InputStream stream = null;
    String line, response = new String();

    try {
        stream = url.openStream();
        BufferedReader buffReader = 
            new BufferedReader(new InputStreamReader(stream));

        while ((line = buffReader.readLine()) != null)
            response += line;

    } catch (MalformedURLException mue) {
        mue.printStackTrace();
    } catch (HTTPException httpexc) {
        httpexc.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    } finally {
        try {
            stream.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

    return response;
}

私は自分のアプリケーションでこのコードを頻繁に実行しますが、上記の例外が発生することもあります。

スタックトレースの一部は次のとおりです。

java.io.IOException: Server returned HTTP response code: 500 for URL: ...
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
4

1 に答える 1

2

例外処理にバグがあります。openStream()呼び出しで例外がスローされた場合、finallyブロックは参照を呼び出そうとしclose()nullNPEを取得します。

それはあなたが見ている行動を説明するかもしれません:

  1. openStream()失敗します。
  2. catch (IOException ioe) {ioe.printStackTrace();}スタックトレースを出力します。
  3. finallyブロックがNPEをスローし、異常request()終了します。
  4. 「キャッチされない例外ハンドラー」のないスレッドで呼び出しが実行されている場合request()、NPEが原因でスレッドがサイレントに停止する可能性があります。
于 2013-03-25T11:13:46.933 に答える