我在使用HTTPUrlConnection时遇到了一些问题。代码基本上是在循环中运行的,每次都连接到不同的URL,检查响应,如果响应满足某些条件,则退出。我被StackOverflowerr搞砸了,但我不确定自己搞砸了什么。我没有使用连接就尝试了。断开()。
另外,你们有什么加快下面代码的建议吗?
谢谢
线程“main”java中出现异常。java上的lang.StackOverflowerr。安全访问控制器。java上的doPrivileged(本机方法)。网插座sun上的getInputStream(Socket.java:911)。网www.http。HttpClient。在sun上解析HTTP(HttpClient.java:642)。网www.protocol。http。HttpURLConnection。sun上的getInputStream0(HttpURLConnection.java:1535)。网www.protocol。http。HttpURLConnection。java上的getInputStream(HttpURLConnection.java:1440)。网HttpURLConnection。getResponseCode(HttpURLConnection.java:480)位于Main。sendRequest(Main.java:96)位于Main。HandlerResponse(Main.java:140)
public class Main {
static int counter;
public static void main(String [] args) {
counter = 0;
sendRequest("http://192.168.0.1");
}
public static void sendRequest(String path) {
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
String response = stringBuilder.toString();
handleResponse(response);
inputStreamReader.close();
bufferedReader.close();
}
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void handleResponse(String response) {
String s = response.substring(62,67);
if (s.equals("Statu")) {
return;
} else {
sendRequest("http://192.168.0.1/" + counter);
counter += 1;
}
}
}
sendRequest和handleACK相互调用,它们的调用时间可能比您想象的要长得多(迭代次数更多)。
如果这确实是问题所在(只需记录HandlerRequest调用sendRequest的次数),您可以为HandlerResponse建立故障保护/限制,以便在尝试次数超过X次时停止重定向到sendRequest。
如果堆栈溢出,可能是做错了什么,可能是堆栈需要更多的空间。
您可以尝试使用此参数-Xss
来增加堆栈空间,例如,您可以尝试1或2 megas:-Xss1m
。
如果你的问题是糟糕的代码,不管你的堆栈大小有多大,你都会得到StackOverflowException。我不是HttpClient的专家,但我可以看到你的sendRequest
方法调用你的handleResponse
方法,这个方法再次调用sendRequest
,可能是一个无限循环?
StackOverflower错误表示递归方法调用sendRequest
经常被发送到,堆栈上没有剩余内存。为了更好的解释,请看什么是StackOverflowerr?首先,你可能应该检查你破坏外观的地方(在handleResponse
和sendRequest
中)是否完全按照你的预期工作。尤其是在handleResponse
中,看起来是有线的。如果一切都是这样,你可以尝试重写逻辑,使用循环而不是递归调用。
我需要在Freemarker中使用实体列表迭代器迭代大量记录。但是,在使用递归宏时,当它仅达到1000条记录时,就会出现StackOverflow错误。下面是同样的代码片段。
使用此链接试图升级到TLSv1。2.唯一的区别是到目前为止支持所有TLS,因此使用了以下方法: 奇怪的是出现了这样的错误: 我的文件在哪里。java有这样的内容,请注意下面提到的第101行: 我的问题 > 很明显,base.createSocket递归调用它自己的方法。不明白怎么做? 无法在我的本地机器上复制,这些日志只发生在生产中。因此,我如何复制这个(使用与生产中存在的相同的Java版本,to
用于图像文件: 以下是我完成的错误: java.net.socketException:sendto失败:在libcore.io.iobridge.MaybeThrowAfterSendto(Iobridge.java:586)在libcore.io.iobridge.sendto(Iobridge.java:555)在java.net.plainsockeTimpl.write(plainsoc
我使用自定义授权标头对http请求进行签名: 所以这个异常不同于最初的异常。当我移除头部并禁用webservice上的授权时,连接将按预期工作。所以问题似乎出在自定义授权标头上。有什么想法吗?
从数据库获取数据时出错: 那我该怎么解决呢?
我编写了一个java程序来从url NSE Bhavcopy下载文件 但是我得到了“thread'main'java.net.ConnectException:Connection timed Ut:Connect”,我尝试了以下排列和组合,但没有成功。 null 以下是代码和跟踪以供参考,有人可以帮助我吗 痕迹