2014-12-26 44 views
0

我试图从网络(更具体的维基百科)阅读内容,并且每当它是一个不存在的维基页面(即http://en.wikipedia.org/wiki/Asdfasdfasdfasdf)时,我的BufferedReader挂在init上。我已经缩小到初始化,而不是readLine(),我觉得很奇怪。我的代码如下:BufferedReader初始化挂起?

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页面有问题...任何帮助,将不胜感激。

+0

错误,那个页面*确实存在。点击链接,你会得到一个删除页面。 – EJP

回答

4

我强烈怀疑它不是悬挂的 - 它只是抛出一个异常而没有注意到。我期望它会抛出FileNotFoundException,这是我尝试时发生的情况。

它发生在readLine()之前,因为getInputStream()将发出HTTP请求,并且失败。

InputStream inputStream = connection.getInputStream(); 
// You won't get to here whne the page doesn't exist 
BufferedReader wikiReader = new BufferedReader(new InputStreamReader(inputStream)); 

基本上,你需要看看其中的筹码你捕获异常...,使:你可以看到这一点,如果你改变了代码 - 这是从来没有尽可能的BufferedReader构造函数本身得到确定它是适当的。首先,你应该确保你记录了异常,然后确定你想要做的事情......这非常依赖于你的应用程序的功能。

1

当URL指向一个不存在的页面会出现以下异常:

java.io.FileNotFoundException: http://en.wikipedia.org/wiki/Asdfasdfasdf 

所以,你基本上需要通过使用try/catch来处理你的例外:

URL url = new URL("http://en.wikipedia.org/wiki/" + query.replace(" ", "_")); 
URLConnection connection = url.openConnection(); 
try (BufferedReader wikiReader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { 
     // Here you can handle the correct stuff 
} catch (IOException e) { 
    // here you can handle the error stuff 
}