我正在尝试设置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);
问题在于,当我将超时设置为2000(2秒)时,它会等待超过它(例如我自己计算的20秒),直到抛出超时异常。
有什么问题?
如何将超时设置为完全符合我设置的值?
答案 0 :(得分:1)
readTimeOut
无法在Sun的(Oracle)实施中可靠地运行。甚至在JavaDocs:
此方法的某些非标准实现忽略指定的 超时。要查看读取超时设置,请调用getReadTimeout()。
您可以使用线程或计时器模拟超时。将连接传递给子线程,并在超时到期后要求该线程调用disconnect
或类似的东西。