由于连接超时,无法通过ImageIO.read(url)获取图像

时间:2010-06-11 13:46:19

标签: java url timeout connection javax.imageio

以下代码似乎总是失败:

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

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

  

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

     

引起:java.net.ConnectException:连接超时
          at java.net.PlainSocketImpl.socketConnect(Native Method)
          at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310)
          at 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

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

3 个答案:

答案 0 :(得分:8)

这对我有用。 :)

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

我知道我迟到了。因为,即使我遇到同样的问题,也要考虑把它放在一边帮助一个人。 :)

答案 1 :(得分:2)

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

答案 2 :(得分:0)

这段代码非常适合我。

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

  

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

编辑:

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

  

这是什么意思?

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

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