Java URL挂起,永远不会在网站上读取

时间:2011-09-16 02:11:44

标签: java url

我正在尝试在网站上阅读并将其保存为字符串。我正在使用下面的代码,它在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 个答案:

答案 0 :(得分:1)

可能是因为您在代理之后,Eclipse会自动添加设置以配置它。

如果您位于代理后面,则在从命令提示符运行时,请尝试设置java.net.useSystemProxies属性。您还可以使用herehttp.proxyHosthttp.proxyPort)找到一些网络属性来手动配置代理设置。

答案 1 :(得分:1)

我遇到了这样的问题并找到了解决方案。 这是我的工作代码:

// 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();

答案 2 :(得分:0)

如果这是你的所有代码都在做的话,那么它没有理由不能从命令行运行。我怀疑你已经删除了什么坏了。例如:

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