JAVA应用程序和ECLIPSE可以';我无法连接到互联网
所以我写了一段代码测试我的java连接到internet的能力。它应该从www.google.com获取html,并在JFrame的JTextArea对象中显示内容。 这是代码,因此您可以获得清晰的图片:JAVA应用程序和ECLIPSE可以';我无法连接到互联网,java,eclipse,url,connection,jsoup,Java,Eclipse,Url,Connection,Jsoup,所以我写了一段代码测试我的java连接到internet的能力。它应该从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 jav
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(因为我正在使用eclipse)无法连接到marketplace,也无法获取更新。
2.Eclipse的web浏览器工作正常。
3.我的系统浏览器(Mozilla Firefox)连接良好
4.我将JSoupFetchTest导出到一个可运行的jar中,并尝试从系统级别运行它,但没有任何效果
5.我正在运行Windows 7 Professional MSDN版本
6.我联系了eclipse支持人员,他们认为这不是eclipse的错,并建议我支持代理。
7.我联系了我的ISP,看看我是否真的是,他们说我不是。
8.我更改了JAVA的网络设置,所以现在它可以“直接”连接。之前的设置是“使用浏览器设置”,但也不起作用。
9我的eclipse窗口->首选项->常规->网络连接活动提供程序设置为“本机”,我还尝试了“直接”
10方法downloadHtml(字符串路径)在“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)
java.net.SocketTimeoutException:读取超时
位于java.net.SocketInputStream.socketRead0(本机方法)
位于java.net.SocketInputStream.read(SocketInputStream.java:150)
位于java.net.SocketInputStream.read(SocketInputStream.java:121)
在java.io.BufferedInputStream.fill处(BufferedInputStream.java:246)
位于java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
在java.io.BufferedInputStream.read处(BufferedInputStream.java:345)
位于sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:703)
位于sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1534)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
位于java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
位于org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:453)
位于org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:434)
位于org.jsoup.helper.HttpConnection.execute(HttpConnection.java:181)
位于org.jsoup.helper.HttpConnection.get(HttpConnection.java:170)
在JSoupFetchTest.gogo(JSoupFetchTest.java:42)
在JSoupFetchTest。(JSoupFetchTest.java:32)
位于JSoupFetchTest.main(jsoupfetchttest.java:92)
我还尝试将JSoup.connect的超时设置为无穷大。然后,它将永远持续下去
在你们说我的问题是重复的,或者把我委托给其他可能解决我问题的外部解决方案之前,请相信我——问题要么是我的,要么我就在那里——我浏览互联网寻找解决方案已经好几个星期了,我想拔出我的头发……请帮助,如果你可以导致它阻止我在我的eclipse中安装东西和开发除独立应用程序以外的任何东西 在URL--“http:/www.google.com:80”生效后,您需要一个套接字编号。JSoup可能会使用默认值,但在Java中以流的形式打开URL则不然。以下程序适合我。因此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() );
}
}
你观察到的意外行为到底是什么?是否有例外;暂停,等等?!“无法连接到互联网”有点不具体。很好,再进一步。我忘记问的是:当你把日食从等式中去掉时会发生什么;意思是:你能从命令行成功运行程序吗?你必须使用JSoup吗?你能用普通插座测试吗?这看起来像是一个本地配置问题,将JSoup从图中删除将消除该库出现配置问题的可能性;你为什么把你的时间(可能还有我们的)浪费在等式上?我同意markspace——从“最简单”的例子开始;当它起作用时——然后考虑让你的例子更复杂。你可能有一个防火墙阻止Java连接。禁用它。我按照您的建议添加了端口号,但其行为方式仍然相同。我将尝试按照JBNizet的建议关闭防火墙,看看是否有帮助。你是对的——我去掉了端口号(并注释掉了所有的JSoup内容),它仍然有效。所以添加端口号不是解决方案。防火墙已关闭。。。windows one和ISP one也一样,我知道我的网关地址,但我不知道如何使用它,我真的不知道在路由器设置中查找什么(而且由于浏览器工作正常,我看不出它有什么用处。请您解释一下好吗?)。Java权限设置为可能的最低值,即“高”,但是Java更新很好,只是Java应用程序没有。