通过设置系统属性,HttpURLConnection超时无法正常工作

时间:2016-10-10 13:44:52

标签: 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(targetURL);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

但如果我设置了以下属性

connection.setConnectTimeout(Integer.parseInt(timeout));

然后它会在所需的时间内超时而无需等待服务器的响应。

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

修改:这与behavior/bug有什么关系?或者与Java版本有什么关系,因为相同的代码曾经在Java 1.4中工作,但现在我使用的是Java 1.7。

1 个答案:

答案 0 :(得分:2)

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

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