我正在尝试从网络(更具体地说是维基百科)读取内容,但只要它是一个不存在的维基页面(即 http://en.wikipedia.org/wiki/Asdfasdfasdfasdf ),我的 BufferedReader 就会在初始化时挂起。我已经将它缩小到 init 而不是我觉得很奇怪的 readLine() 。我的代码如下:
URL url = new URL("http://en.wikipedia.org/wiki/" + query.replace(" ", "_"));
URLConnection connection = url.openConnection();
BufferedReader wikiReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
wikiReader 初始化之后的任何代码都不会执行,但这不是现有 wiki 页面的问题...任何帮助将不胜感激。
最佳答案
我强烈怀疑它没有挂起 - 它只是在您不注意的情况下抛出异常。我预计它会抛出 FileNotFoundException
,这是我尝试时发生的情况。
它发生在 readLine()
之前,因为 getInputStream()
将发出 HTTP 请求,但失败了。它永远不会达到 BufferedReader
构造函数本身的程度 - 如果将代码更改为:
InputStream inputStream = connection.getInputStream();
// You won't get to here whne the page doesn't exist
BufferedReader wikiReader = new BufferedReader(new InputStreamReader(inputStream));
基本上,您需要查看您在堆栈中的哪个位置捕获了异常……并确保它是合适的。首先,您应该确保您正在记录异常,然后计算出您之后想要做什么……这在很大程度上取决于您的应用程序做什么。
关于java - BufferedReader 初始化挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656462/