2012-01-08 3 views
1

Je suis en train de définir un délai d'attente pour java.net.URLConnection comme ceci:délai d'attente est plus que je mets dans `java.net.URLConnection`

URL url = new URL("http://google.com"); 
URLConnection con = url.openConnection(); 
con.setConnectTimeout(2000); 
con.setReadTimeout(2000); 
InputStream in = con.getInputStream(); 
doc = new Tidy().parseDOM(in, null); 
XPath xpath = XPathFactory.newInstance().newXPath(); 
XPathExpression expr = xpath.compile("//td//span"); 
Node form = (Node) expr.evaluate(doc, XPathConstants.NODE); 

Le problème est que si je régler le délai à 2000 (2 secondes) il attend plus que cela (par exemple 20 secondes comme je l'ai compté moi-même) jusqu'à ce qu'il lève l'exception Timeout.

Quel est le problème?
Comment puis-je régler le délai d'attente pour qu'il fonctionne exactement à la valeur que j'ai définie?

Répondre

1

Le readTimeOut ne fonctionne pas de manière fiable dans l'implémentation de Sun (Oracle). Ceci est même mentionné dans le JavaDocs:

une implémentation non standard de cette méthode ne tient pas compte du délai d'attente spécifié. Pour voir le délai d'attente de lecture défini, appelez getReadTimeout().

Vous pouvez cependant simuler des délais d'attente à l'aide de threads ou de minuteurs. Passez la connexion à un thread enfant et demandez à ce thread d'appeler disconnect ou quelque chose de similaire après l'expiration du délai.

+0

Salut, Merci. Mais la mise en œuvre de Sun n'est pas standard?! – RYN

+0

Techniquement parlant, le Java de Sun est la "mise en œuvre de référence" de la spécification Java. Et comme il a passé le TCK, il est sûr de dire que c'est une implémentation standard. Je pense que cette phrase dans JavaDoc est vague. Cela aurait dû être quelque chose comme "les implémentations Java sont autorisées à implémenter cette méthode comme une opération" ou quelque chose comme ça. En passant, êtes-vous sûr de lire quoi que ce soit du flux d'entrée? Sinon, pourquoi devrait-il temporiser du tout? Pourriez-vous poster un code de bloc plus complet qui montre ce comportement? – Behrang

+0

Salut, Merci pour les réponses, j'ai ajouté quelques lignes de codes supplémentaires. – RYN

Questions connexes