2016-10-10 1 views
0

Я хочу, чтобы мое приложение переходило на время ожидания в определенные секунды, но оно продолжает пытаться связаться с указанным URL-адресом, пока не получит ответ. Ниже приведен код, который я использую.Тайм-аут HttpURLConnection не работает, установив свойства системы

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.

+0

@ brso05 Вы можете что-то предложить? – Steve

ответ

2

Стандартный подход к объектно-ориентированному дизайну защитное копирование. Это означает, что методы возвращают копии своих данных, а не возвращают сам внутренний объект, поэтому другой код не может пытаться выполнять вредные действия, не пройдя через API, из которого он получил объект, поэтому изменения можно проверить на достоверность.

System.getProperties() возвращает объект свойств, который является копией свойств внутренней системы. Вместо этого используйте System.setProperty.

+1

Вы правы в отношении «защитного копирования», но он не работает с изменениями, которые вы предложили. – Steve

+0

Каково фактическое значение 'timeOut'? – VGR

+0

40000 миллисекунд – Steve

Смежные вопросы