【问题标题】:Unable to acquire image through ImageIO.read(url) because of connection timed out由于连接超时,无法通过 ImageIO.read(url) 获取图像
【发布时间】:2010-06-11 13:46:19
【问题描述】:

以下代码似乎总是失败:

    URL url = new URL("http://userserve-ak.last.fm/serve/126/8636005.jpg");
    Image img = ImageIO.read(url);
    System.out.println(img);

我检查了网址,它是一个有效的 jpg 图片。我得到的错误是:

线程“主”javax.imageio.IIOException 中的异常:无法从 URL 获取输入流!
在 javax.imageio.ImageIO.read(ImageIO.java:1385)
在 maestro.Main2.main(Main2.java:25)

原因:java.net.ConnectException:连接超时
在 java.net.PlainSocketImpl.socketConnect(本机方法)
在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310)
在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:176)
在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163)
在 java.net.Socket.connect(Socket.java:546)
在 java.net.Socket.connect(Socket.java:495)
在 sun.net.NetworkClient.doConnect(NetworkClient.java:174)
在 sun.net.www.http.HttpClient.openServer(HttpClient.java:409)
在 sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
在 sun.net.www.http.HttpClient.(HttpClient.java:240)
在 sun.net.www.http.HttpClient.New(HttpClient.java:321)
在 sun.net.www.http.HttpClient.New(HttpClient.java:338)
在 sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:814)
在 sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:755)
在 sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:680)
在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1005)
在 java.net.URL.openStream(URL.java:1029)
在 javax.imageio.ImageIO.read(ImageIO.java:1383)
... 1 更多

Java 结果:1

这是什么意思? 有趣的是,如果我将互联网连接更改为邻居的无线网络连接,它会突然工作。

【问题讨论】:

  • DNS 问题?如果在地址中使用 IP 92.122.126.242 会怎样?

标签: java url timeout connection javax.imageio


【解决方案1】:

这对我有用。 :)

URL url = new URL("http://userserve-ak.last.fm/serve/126/8636005.jpg");
Image image = ImageIO.read(url.openStream());
System.out.println(image);

我知道我迟到了。因为,即使我也遇到了同样的问题,我也想到了推杆,因为它会帮助一些人。 :)

【讨论】:

    【解决方案2】:

    这在家庭网络上可能不太可能发生,但很多公司都有 HTTP 代理服务器,这会使您的错误有点误导。由于您的浏览器配置为使用您的代理服务器,因此通常手动操作 URL 似乎可以正常工作。您可以在命令行或代码中设置代理设置,请参阅:http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html

    【讨论】:

    • 但是我应该为代理使用什么设置?
    • 那个,我不能说。您可以检查浏览器的代理设置并复制这些设置吗?
    • firefox 没有列出任何代理。当我输入 about:config 时,属性 network.proxy.ftp = "" 和 network.proxy.http = ""。意味着它们没有设置(因此没有使用)
    【解决方案3】:

    这段代码非常适合我。

    如果您的互联网连接速度非常慢,那就是原因。或者您正在下载/上传内容(http、torrent、ftp、...)

    我已经手动检查了网址,它是有效的,并且包含一个有效的 jpg 图片。

    编辑:

    您是否在浏览器中对其进行了测试? 如果是这样,可能超时时间更长。
    您是否使用浏览器在自己的网络上对其进行了测试?

    这是什么意思?

    超时异常意味着您无法创建套接字。这可能有几个原因:

    • 服务器没有响应。
      • 服务器很忙。
    • 包丢失。这也可能有几个原因:
      • 您正在下载,您的宽带已满。
      • 您远离互联网提供商的“中心”。 (你住在乡下)

    【讨论】:

    • 已尝试使用 URLConnection(以便我可以设置超时)。并将超时设置为一分钟。还是什么都没有。
    • 另外,我有一个 adsl 互联网连接,可以实现高速下载。所以不能这样。如果服务器很忙,那么我一开始就无法获取图像 URL。还没用完我所有的下载容量,在我们说话的时候下载各种大种子。我住在一个大城市附近。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2021-01-15
    • 1970-01-01
    • 2014-02-09
    • 2011-10-23
    相关资源
    最近更新 更多