Java URL зависает и никогда не читает на веб-сайте - PullRequest
1 голос
/ 16 сентября 2011

Я пытаюсь прочитать на веб-сайте и сохранить его в строку.Я использую этот код ниже, который прекрасно работает в Eclipse.Но когда я пытаюсь запустить программу через командную строку в Windows, например «java MyProgram», программа запускается и просто зависает и никогда не читает в URL.Кто-нибудь знает, почему это происходит?

URL link = new URL("http://www.yahoo.com");

            BufferedReader in = new BufferedReader(new InputStreamReader(link.openStream()));
            //InputStream in = link.openStream();
            String inputLine = "";
            int count = 0;
            while ((inputLine = in.readLine()) != null)
            {
                site = site + "\n" + inputLine;
            }
            in.close();

...

Ответы [ 3 ]

1 голос
/ 16 сентября 2011

Это может быть связано с тем, что вы находитесь за прокси-сервером, а Eclipse автоматически добавляет настройки для настройки этого.

Если вы находитесь за прокси-сервером, при запуске из командной строки попробуйте установить java.net.useSystemProxiesимущество.Вы также можете вручную настроить параметры прокси с несколькими сетевыми свойствами, найденными здесь (http.proxyHost, http.proxyPort).

1 голос
/ 14 февраля 2017

Я столкнулся с такой проблемой и нашел решение.Вот мой рабочий код:

// Create a URL for the desired page
URL url = new URL("your url");
// Get connection
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000); // 5 seconds connectTimeout
connection.setReadTimeout(5000 ); // 5 seconds socketTimeout

// Connect
connection.connect(); // Without this line, method readLine() stucks!!!
// because it reads incorrect data, possibly from another memory area

InputStreamReader isr = new InputStreamReader(url.openStream(),"UTF-8");
BufferedReader in = new BufferedReader(isr);
String str;

while (true) {
   str = in.readLine();
   if(str==null){break;}
   listItems.add(str);
}

// Closing all
in.close();
isr.close();
connection.disconnect();
0 голосов
/ 16 сентября 2011

Если это все, что делает ваш код, нет причин, по которым он не будет работать из командной строки.Я подозреваю, что вы вырезали то, что сломано.Например:

public static void main(String[] args) throws Exception {
    String site = "";
    URL link = new URL("http://www.yahoo.com");
    BufferedReader in = new BufferedReader(new InputStreamReader(link.openStream()));
    //InputStream in = link.openStream();
    String inputLine = "";
    int count = 0;
    while ((inputLine = in.readLine()) != null) {
        site = site + "\n" + inputLine;
    }
    in.close();
    System.out.println(site);
}

работает нормально.Другая возможность может быть, если вы запускаете его в Eclipse и из командной строки на двух разных компьютерах, и последний не может достичь http://www.yahoo.com.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...