【问题标题】:Java delay before throwing ConnectException抛出 ConnectException 之前的 Java 延迟
【发布时间】:2013-07-07 05:13:43
【问题描述】:

我正在用 Java 编写一些代码来从 url 下载内容,在我的配置中,一些下载应该由代理处理,而其他的则没有它。

所以我编写了这段代码(它可以工作)来下载所有 URL 类型,但我想减少抛出 ConnectException 之前的延迟时间,以便代码可以更快地执行。

URL global_url = new URL("http://google.com");
Scanner sc = null;
try { 
    sc = new Scanner(global_url.openStream());
}
catch (ConnectException e) {
    try {
        System.setProperty("http.proxyHost", "my.host");
        System.setProperty("http.proxyPort", "my.port");
        sc = new Scanner(global_url.openStream());
        System.setProperty("http.proxyHost", "");
        System.setProperty("http.proxyPort", "");
    }
    catch (ConnectException exc) {
        //Do stuff
    }
}

现在大约需要。 10s 在抛出异常之前,我想将此时间减少到最多 2s 或 3s。

我能得到一些帮助吗? 谢谢!

【问题讨论】:

  • global_url的类型是什么?我在保证URL
  • 当然 global_url 的类型是 URL yes ;)
  • 这段代码无论如何都不起作用。这些系统属性只读取一次,无论如何您都不会清除它们。你需要好好看看如何使用 java.net.Proxy。
  • @EJP :我不知道你为什么声称这段代码不起作用,它在我的程序上完美运行......当我有一个不需要使用的本地 url 时代理,我会立即获取文件,而当我想要一个“外部”url时,我会捕获异常并使用代理获取文件...

标签: java exception delay throw connectexception


【解决方案1】:

你可以这样设置超时时间:

long connectTimeout = 3000;
URL global_url = new URL(urlPath);
URLConnection con = global_url.openConnection();
con.setConnectTimeout(connectTimeout);

connectTimeout 可以设置为毫秒。由于需要 3s 超时,所以设置为 3000。

【讨论】:

  • 感谢您的回答。然后我给我的扫描仪喂食: Scanner sc = new Scanner(con.getInputStream()) ?
  • 也许你应该补充一点,当超时完成时,它会引发 SocketTimeoutException 而不是 ConnectExcepion ;) 除了从这一点开始它工作正常,再次感谢!
猜你喜欢
  • 2015-07-07
  • 1970-01-01
  • 2011-07-20
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
相关资源
最近更新 更多