【问题标题】:JAVA apps and ECLIPSE can't connect to internetJAVA 应用程序和 ECLIPSE 无法连接到互联网
【发布时间】:2015-05-02 16:25:16
【问题描述】:

好的,所以我写了一段代码测试我的java连接到互联网的能力。它应该从 www.google.com 获取 html 并在 JFrame 的 JTextArea 对象中显示内容。 这是代码,所以你可以清楚地看到:

import java.awt.Color;
import java.awt.Dimension;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFetchTest extends JFrame{
    String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0";
    boolean jsoupcond = true;
    String address = "http://www.google.com";
    JTextArea text;
    public JSoupFetchTest(){
        text = new JTextArea();
        text.setPreferredSize(new Dimension(500, 500));
        text.setBackground(Color.BLACK);
        text.setForeground(Color.WHITE);
        text.setVisible(true);
        text.setLineWrap(true);     
        this.add(text);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.pack();        
        gogo();
    }

    private void gogo() {
        if(jsoupcond){
            text.setText(text.getText() +"\nstart...");

            try {
                text.setText(text.getText() +"\nConnecting to " +address+ "...");   
                Document doc = Jsoup.connect(address).userAgent(userAgent).get();
                text.setText(text.getText() +"\nConverting page document into text");
                String s = doc.toString();
                text.setText(text.getText() +"\nText: \n" +s);
                System.out.println();
            } catch (Exception e) {            
                text.setText(text.getText() +"\n" +e.toString());
                e.printStackTrace();
            }
            text.setText(text.getText() +"\nEnd.");
        }
        String html = downloadHtml(address);
        text.setText(text.getText() +"\nDownloading HTML...");
        text.setText(text.getText() +"\nHTML:");
        text.setText(text.getText() +"\n" +html);
    }

    private String downloadHtml(String path) {
        text.setText(text.getText() +"\ndownloadHtml entry point...");
        InputStream is = null;
        try {
            text.setText(text.getText() +"\ntry block entered...");
            String result = "";
            String line;

            URL url = new URL(path);
            text.setText(text.getText() +"\nabout to open url stream...");
            is = url.openStream();  // throws an IOException
            text.setText(text.getText() +"\nurl stream opened...");
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            text.setText(text.getText() +"\nstarting to read lines...");
            while ((line = br.readLine()) != null) {
                result += line;
            }
            text.setText(text.getText() +"\nreading lines finished...");
            return result;
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } finally {
            try {
                if (is != null) is.close();
            } catch (IOException ioe) { }
        }
        return "";
    }

    public static void main(String[] args) {
        new JSoupFetchTest();       
    }
}

我还要补充一点:
1. 我的 Eclipse(因为我正在使用)无法连接到市场,也无法获取更新。
2. Eclipse 的网络浏览器运行良好。
3. 我的系统浏览器(Mozilla Firefox)连接正常
4.我将JSoupFetchTest导出到一个可运行的jar中并尝试从系统级别运行它,没有效果
5. 我运行的是 Windows 7 Professional MSDN 版
6. 我联系了 eclipse 支持,他们认为这不是 eclipse 的错,并建议我使用代理。
7. 我联系了我的 ISP 看看我是否确实是,他们说我不是。
8. 我更改了我的 JAVA 网络设置,现在它“直接”连接。在设置为“使用浏览器设置”之前,它也不起作用。
9.我的eclipse的Window -> Preferences -> General -> Network Connections active provider设置为“Native”,我也试过“Direct”
10.方法downloadHtml(String path)停在“is = url.openStream();”并且永远持续下去……

我从 JSoup 得到的例外是:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:703)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1534)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:453)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:434)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:181)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:170)
    at JSoupFetchTest.gogo(JSoupFetchTest.java:42)
    at JSoupFetchTest.<init>(JSoupFetchTest.java:32)
    at JSoupFetchTest.main(JSoupFetchTest.java:92)

我还尝试将 JSoup.connect 的超时设置为无穷大。然后它会一直持续下去。

在你们说我的问题是重复的,或者将我委托给其他外部可能的问题解决方案之前,请相信我 - 无论是我的问题还是我在那里 - 我已经浏览了数周的互联网以寻找解决方案我想把我的头发拉出来......
如果你能阻止我在我的 Eclipse 中安装东西以及开发除独立应用程序之外的任何东西,请提供帮助......

【问题讨论】:

  • 您观察到的意外行为到底是什么?有没有例外;超时,挂?! “无法连接到互联网”有点不具体。
  • 好,更进一步。我忘了问:当你把日食排除在外时会发生什么;意思是:你能从命令行成功运行程序吗?
  • 一定要用JSoup吗?你能用普通的插座测试吗?这看起来像是一个本地配置问题,将 JSoup 排除在外将消除该库出现配置问题的一些可能性。
  • 如果eclipse没关系;你为什么把你的(可能是我们的)时间留在等式中?我同意标记空间 - 从可能的“最简单”示例开始;如果可行 - 然后考虑让您的示例更复杂。
  • 您可能有防火墙阻止 Java 连接。禁用它。

标签: java eclipse url connection jsoup


【解决方案1】:

您需要在 URL 后添加一个套接字号——“http:/www.google.com:80”有效。 JSoup 可能为此使用默认值,但在 Java 中将 URL 作为流打开时不会。

【讨论】:

  • 我按照你的建议添加了端口号,但它的行为仍然相同。我会尝试按照 JBNizet 的建议关闭防火墙,看看是否有帮助。
  • 你说得对——我去掉了端口号(并注释掉了所有 JSoup 的东西),它仍然有效。所以添加端口号不是解决办法。
【解决方案2】:

以下程序适合我。所以 Java 和 JSoup 正在工作。它必须是您的网络的某种本地配置问题。检查您的防火墙、路由器、网关和 Java 权限。对您的项目进行干净的重建。等等。注释掉行,直到它确实起作用,然后一次又一次地放回一行,直到找到问题为止。等等。

package stuff;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;


public class SocketTest
{

   public static void main( String[] args ) throws Exception
   {
      URL url = new URL( "http://www.google.com" );
      URLConnection sock = url.openConnection();
      InputStream ins = sock.getInputStream();
      BufferedReader reader = new BufferedReader( new InputStreamReader(ins, "UTF-8" ) );
      for( String line; (line = reader.readLine()) != null; ) {
         System.out.println( line );
      }
      ins.close();

      Document doc = Jsoup.connect( "http://www.google.com" ).get();
      System.out.println( doc.toString() );

      String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0";
      Document doc2 = Jsoup.connect( "http://www.google.com" ).userAgent(userAgent).get();
      System.out.println( doc2.toString() );

   }
}

【讨论】:

  • 防火墙已关闭... Windows 1 和 ISP 1,我知道我的网关地址,但我不知道如何处理它,老实说,我不知道在路由器设置中寻找什么(由于浏览器工作正常,我看不出它有什么用处。你能解释一下吗?)。 Java 权限设置为“高”的最低可能,但是 Java 更新正常,只是 Java 应用程序没有。
猜你喜欢
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多