有时我打开一个流:
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吗?
THX
编辑(附加代码; - )
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;
}
我经常在我的应用程序中运行此代码,有时我会得到提到的异常。
这是stacktrace的一部分:
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)
答案 0 :(得分:2)
您的异常处理中存在错误。如果openStream()
调用中出现异常,则finally
阻止将尝试在close()
引用上调用null
,您将获得一个NPE。
这可以解释你所看到的行为:
openStream()
失败。catch (IOException ioe) {ioe.printStackTrace();}
打印堆栈跟踪。finally
块抛出NPE,导致request()
异常终止。request()
调用正在某个没有“未捕获异常处理程序”的线程上运行,那么由于NPE,该线程可能会无声地死亡。