2014-12-26 2 views
0

Я пытаюсь прочитать контент из Интернета (точнее, википедию), и всякий раз, когда это страница wiki, которая не существует (то есть 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 никогда не выполняет, однако это не проблема с вики-страниц, которые существуют ... любая помощь будет оценена.

+0

Err, эта страница *. * Есть. Нажмите ссылку, и вы получите страницу удаления. – EJP

ответ

4

Я сильно подозреваю, что он не висит - это просто бросает исключение, если вы не заметите. Я ожидаю, что он выбросит 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)); 

В принципе, вы должны смотреть на то, где в вашем стеке вы ловить исключения ... и сделать конечно, это уместно. Для начала вам необходимо убедиться, что вы регистрируете исключение, а затем выработаете то, что хотите сделать после этого ... это очень сильно зависит от того, что делает ваше приложение.

1

Когда URL указывает на несуществующий странице следующее исключение происходит:

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

Таким образом, вы в основном должны обрабатывать ваши исключения с помощью TRY/поймать:

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 
}