【问题标题】:How to close an HttpUrlConnection after 5 minutes without getting an exception in Java?如何在 5 分钟后关闭 HttpUrlConnection 而不会在 Java 中出现异常?
【发布时间】:2015-08-01 05:24:50
【问题描述】:

我必须打开一系列网址并从中读取一些数据。我不想花超过 5 分钟来打开一个网址。如果打开时间过长,那么我想跳过该 url 并移至列表中的下一个 url。但是使用超时会产生异常,在这种情况下,我无法继续我的常规操作。

    HttpURLConnection con = (HttpURLConnection)newURL(url).openConnection();
    con.setRequestMethod("HEAD");
    con.setConnectTimeout(5000);

我测试了这段代码,它在 5000 毫秒后给了我一个异常。有没有办法做到这一点?

【问题讨论】:

  • 吃掉异常,记录它并移动到下一个 url
  • 这是什么意思?也就是说,一旦我的控件在 catch 块中处理异常,我将如何继续下一个链接? catch 块结束后我的程序不会终止吗?
  • 不,不会结束。我建议你在进一步了解异常在 Java 中的工作原理之前先了解一下
  • 好的,谢谢。 :)

标签: java http url network-programming httpurlconnection


【解决方案1】:

获得异常并没有错。事实上,这是正确的做法。否则你怎么知道连接是否成功?

只需处理异常并继续(或重试)。

【讨论】:

    【解决方案2】:

    你是什么意思 - 如果超时,你不能继续你的常规操作?

    有什么问题:

    for (HttpURLConnection aConnection : collectionOfConnections) {
      try {
        aConnection.setTimeout() ....
        ... probably more code
      }
      catch (WhateverExceptionWouldBeThrown) {
        ... some error handling
      }
    }
    

    换句话说:“收集”您的网址;并行打开它们;有些会起作用;其他会导致超时;继续那些可以打开的。

    含义:如果你认为一个异常会破坏你的整个程序;您可能想回到“学习”模式并阅读更多关于为什么存在异常以及如何处理它们的信息;以及如何充分利用它们。

    【讨论】:

    • 我的意思是,一旦我的控件在catch块中处理异常,在错误处理之后,我的程序不会终止吗?还是会继续运行for循环?
    • 你的评论完全证明了我所说的:你不明白异常是如何工作的(因为是的 - 如果一个异常被捕获,并且你的 catch 块没有调用 System.exit,你的程序只是继续它的流程在下一个“跟随”的地方)。就像在我的示例中一样 - 它只会继续该循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2012-12-22
    • 2018-07-06
    • 1970-01-01
    相关资源
    最近更新 更多