Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过设置系统属性,HttpURLConnection超时不起作用_Java_Network Programming_Timeout_Httpurlconnection - Fatal编程技术网

Java 通过设置系统属性,HttpURLConnection超时不起作用

Java 通过设置系统属性,HttpURLConnection超时不起作用,java,network-programming,timeout,httpurlconnection,Java,Network Programming,Timeout,Httpurlconnection,我希望我的应用程序在特定的几秒钟内超时,但它会一直尝试联系指定的URL,直到收到响应为止。下面是我正在使用的代码 System.getProperties().setProperty("sun.net.client.defaultConnectTimeout", timeOut); System.getProperties().setProperty("sun.net.client.defaultReadTimeout", timeOut); URL url = new URL(targe

我希望我的应用程序在特定的几秒钟内超时,但它会一直尝试联系指定的URL,直到收到响应为止。下面是我正在使用的代码

System.getProperties().setProperty("sun.net.client.defaultConnectTimeout", timeOut);

System.getProperties().setProperty("sun.net.client.defaultReadTimeout", timeOut); 

URL url = new URL(targetURL);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
但是如果我设置以下属性

connection.setConnectTimeout(Integer.parseInt(timeout));
然后,它在所需的时间内超时,而无需等待服务器的响应

那么,为什么不使用系统属性来超时呢


编辑:这与此有关吗?或者与Java版本有任何关系,因为Java 1.4中的代码与Java 1.7中的代码相同,但现在我使用的是Java 1.7。

面向对象设计的标准方法是防御性复制。这意味着方法返回其数据的副本,而不是返回实际的内部对象本身,因此其他代码不能在不经过获取对象的API的情况下尝试执行有害操作,因此可以检查更改的有效性


System.getProperties()
返回一个Properties对象,该对象是内部系统属性的副本。请改用。

您对“防御性复制”的看法是正确的,但它与您建议的更改不起作用。
超时的实际值是多少?40000毫秒您确定
超时的字符串值是
“40000”
?没有空格,没有标点符号?我很确定,因为它与“connection.setConnectTimeout(Integer.parseInt(timeout));”配合使用效果很好@你能提出一些建议吗?