我在使URL连接工作时遇到了一些麻烦。我发现,如果我创建一个URL对象,它工作正常。但是之后的一切都根本不起作用。起初我以为可能是因为我没有关闭流,但事实并非如此。
-1 =失败
1 =成功
Testing:
URLFail test0 = new URLFail();
URLFail test1 = new URLFail(1);
URLFail test2 = new URLFail(1,1);
OutPut:
0Param 1
1Param -1
2Param -1
现在,如果我首先切换哪个对象,则结果会发生变化。
Testing:
URLFail test2 = new URLFail(1,1);
URLFail test0 = new URLFail();
URLFail test1 = new URLFail(1);
OutPut:
0Param -1
1Param -1
2Param 1
在这种情况下,只有test2成功。这让我相信每个类只能使用一个URL流吗?
这就是我用来访问和解析URL的原因。
URL url = null;
URLConnection urlConnection = null;
try {
url = new URL("xxxxx"); // In my program this is a proper URL
} catch (MalformedURLException ex) {
return -1;
}
ArrayList<String> index = new ArrayList<String>();
try {
urlConnection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
while (in.ready()) {
index.add(in.readLine());
}
in.close();
} catch (IOException ex) {
return -1;
}
到目前为止,我真的不知道什么是错的。我想这可能是因为我试图访问同一个网站的速度太快了?
我也通过使用URL中的openStream()方法尝试了没有URLConnection对象。任何帮助将不胜感激,也欢迎任何有关代码本身的一般评论。谢谢!
这是整个代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
public class URLFail {
private int name;
public static void main(String[] args) {
URLFail test0 = null;
URLFail test1 = null;
URLFail test2 = null;
try {
test0 = new URLFail();
System.out.println("First Complete...");
Thread.sleep(1000);
test2 = new URLFail();
System.out.println("Second Complete...");
Thread.sleep(1000);
test1 = new URLFail();
System.out.println("Third Complete...");
} catch (InterruptedException e) {
// TODO: handle exception
}
System.out.println();
System.out.println("0Param " + test0.name);
System.out.println("1Param " + test1.name);
System.out.println("2Param " + test2.name);
}
public URLFail() {
name = getAsList();
}
public int getAsList() {
URL url = null;
URLConnection urlConnection = null;
try {
url = new URL("xxxxx");
} catch (MalformedURLException ex) {
ex.printStackTrace();
return -1;
}
ArrayList<String> index = new ArrayList<String>();
try {
urlConnection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream()));
while (in.ready()) {
index.add(in.readLine());
}
in.close();
} catch (IOException ex) {
ex.printStackTrace();
return -1;
}
if (index.isEmpty()) {
return -1;
} else {
return 1;
}
}
}
我尝试使用google.com,但它运行正常,所以它必须是我正在尝试连接的主机。有没有办法关闭URL连接/断开连接?
答案 0 :(得分:3)
在每个“return -1”前插入一个
ex.printStackTrace();
这很可能会告诉你你需要知道什么。
答案 1 :(得分:2)
那么在连续三次运行它时,您的“问题”服务器上的行为与完整的示例代码有什么关系?如果你运行几次它会产生相同的结果吗?
可能是那个
in.ready()
在第一次在循环中检查时返回false,因为你的目标服务器根本没有足够快地发送响应?