URL集连接超时不起作用

时间:2016-01-29 14:16:27

标签: java

我正在使用rss feed获取最新消息  我得到了一个XML响应

我面临的问题是,如果花费的时间超过5秒,我只想让程序停止 这是我的代码(出于测试目的,我将时间设置为1秒)

public static void main(String args[]) {
     Connection dbConnection = null;
     PreparedStatement inserpstmt = null;
     try {
      final JSONArray latestnews = new JSONArray();
      builder = getDocumentBuilderInstance();
      final URL url = new URL("http://www.rssmix.com/u/8171434/rss.xml");
      url.openConnection().setConnectTimeout(1000);
      url.openConnection().setReadTimeout(1000);
      final Document doc = builder.parse(url.openStream());
      final NodeList items = doc.getElementsByTagName("item");
      for (int i = 0; i < items.getLength(); i++) {
       final Element item = (Element) items.item(i);
       final String title = getValue(item, "title");
       System.out.println(title);
      }
     } catch (Exception e) {
      e.printStackTrace();
      e.getMessage();
     } catch (Throwable e) {
      e.getMessage();
      e.printStackTrace();
     } finally {
     }
    }

但是,请你告诉我为什么没有停止等待超过1秒

已编辑的代码

StringBuffer sb = new StringBuffer("http://www.rssmix.com/u/8171434/rss.xml");
            URLConnection conn = new URL(sb.toString()).openConnection();
            conn.setConnectTimeout(7000);
            conn.setReadTimeout(7000);
            final   Document doc = builder.parse(new InputSource(conn.getInputStream()));

2 个答案:

答案 0 :(得分:1)

您应该以下列方式处理此问题。

final URL url = new URL("http://www.rssmix.com/u/8171434/rss.xml");
URLConnection urlConn = url.openConnection();
urlConn.setConnectTimeout(1000);
urlConn.setReadTimeout(1000);

final Document doc = builder.parse(urlConn.getInputStream());

答案 1 :(得分:0)

在上面的代码中,每次调用openConnection时,都会得到一个新的Connection对象。最后,您使用的是openStream,它等同于openConnection()。getInputStream()。因此所有超时都在不同的连接对象上,最后在输入流的连接对象上没有设置超时。这就是它无法正常工作的原因。下面的代码将起作用,因为在检索InputStream的同一对象上存在超时。

strtok_r