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

Java 由于连接超时,无法通过ImageIO.read(url)获取图像,java,url,timeout,connection,javax.imageio,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); 我已经检查了url,它是一个有效的jpg图像。我得到的错误是: 线程“main”javax.imageio.IIOException中出现异常:无法从URL获取输入流 在javax.imagei

以下代码似乎总是失败:

    URL url = new URL("http://userserve-ak.last.fm/serve/126/8636005.jpg");
    Image img = ImageIO.read(url);
    System.out.println(img);
我已经检查了url,它是一个有效的jpg图像。我得到的错误是:

线程“main”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)
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)
... 还有一个

Java结果:1

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

这在家庭网络上可能不太可能,但许多公司都有HTTP代理服务器,这会使您的错误有点误导。通常,由于浏览器配置为使用代理服务器,因此URL手动运行正常。您可以在命令行或代码中设置代理设置,请参见:。

此代码非常适合我

如果你有一个非常缓慢的互联网连接,那么这就是原因。或者您正在下载/上传内容(http、torrents、ftp等)

我已经手动检查了url,它是有效的,并且包含一个有效的jpg图像

编辑: 你用浏览器测试过吗?如果是这样,可能超时时间更长。
您是否使用浏览器在自己的网络上进行了测试

这是什么意思

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

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


      我知道我迟到了。因为,即使是我也面临着同样的问题,我认为这会帮助别人

      DNS问题?如果您在地址中使用IP 92.122.126.242会怎么样?但是我应该为代理使用什么设置?我不能说。您可以检查浏览器的代理设置并复制这些设置?firefox不列出任何代理。当我输入about:config时,属性network.proxy.ftp=“”和network.proxy.http=“”。这意味着它们没有被设置(因此也没有被使用)已经尝试使用URLConnection(这样我就可以设置超时)。并将超时设置为一分钟。还是没什么。另外,我有一个adsl互联网连接,可以进行高速下载。所以这不可能。如果服务器很忙,那么首先我将无法获取图像url。还没有用完我所有的下载容量,正在下载各种各样的大种子。我住在一个大城市附近。
      URL url = new URL("http://userserve-ak.last.fm/serve/126/8636005.jpg");
      Image image = ImageIO.read(url.openStream());
      System.out.println(image);