2016-10-10 3 views
0

Ich möchte meine Anwendung in bestimmten Sekunden Timeout, aber es versucht weiterhin, die angegebene URL zu kontaktieren, bis es eine Antwort erhält. Unten ist der Code, den ich verwende.HttpURLConnection Timeout funktioniert nicht durch Festlegen der Systemeigenschaften

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(); 

aber wenn ich folgende Eigenschaft

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

dann wird es in gewünschter Zeit abgelaufen, ohne die Antwort des Servers zu warten.

Warum wird die Zeit nicht überschritten, wenn nur die Systemeigenschaften verwendet werden?

Bearbeiten: Hat es etwas damit zu tun behavior/bug? Oder gibt es irgendeine Beziehung zur Java-Version, weil der gleiche Code für Java 1.4 verwendet wird, aber jetzt verwende ich Java 1.7.

+0

@ brso05 Können Sie etwas vorschlagen? – Steve

Antwort

2

Ein Standardansatz für objektorientiertes Design ist defensives Kopieren. Dies bedeutet, dass Methoden Kopien ihrer Daten zurückgeben, anstatt das eigentliche interne Objekt selbst zurückzugeben, sodass anderer Code keine schädlichen Aktionen ausführen kann, ohne die API zu durchlaufen, von der er das Objekt erhalten hat, sodass die Änderungen auf Gültigkeit überprüft werden können.

System.getProperties() gibt ein Properties-Objekt, das ein der internen Systemeigenschaften kopieren. Verwenden Sie stattdessen System.setProperty.

+1

Sie haben recht, was das "defensive Kopieren" betrifft, aber es funktioniert nicht mit den Änderungen, die Sie vorgeschlagen haben. – Steve

+0

Was ist der tatsächliche Wert von 'timeOut'? – VGR

+0

40000 Millisekunden – Steve

Verwandte Themen