Невозможно получить изображение через ImageIO.read (url) из-за истечения времени соединения - PullRequest
5 голосов
/ 11 июня 2010

Кажется, что следующий код всегда дает сбой:

    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!
at javax.imageio.ImageIO.read (ImageIO.java:1385)
at maestro.Main2.main (Main2.java:25)

Причина: java.net.ConnectException: истекло время ожидания соединения
на java.net.PlainSocketImpl.socketConnect (собственный метод)
at java.net.AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl.java:310)
at java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java:176)
at java.net.AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java:163)
на java.net.Socket.connect (Socket.java:546)
на java.net.Socket.connect (Socket.java:495)
at 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)
at 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)
at javax.imageio.ImageIO.read (ImageIO.java:1383)
... еще 1

Java Результат: 1

Что это значит? Забавно, что если я переключаю свое интернет-соединение на беспроводное соединение с соседом, оно неожиданно работает.

Ответы [ 3 ]

8 голосов
/ 03 июля 2013

Это сработало для меня. :)

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

Я знаю, что опоздал. Так как, даже я столкнулся с той же проблемой, подумал о том, чтобы положить, как это поможет кому-то. :)

2 голосов
/ 11 июня 2010

Это может быть маловероятно в домашней сети, но у многих компаний есть прокси-серверы HTTP, которые могут слегка ошибочно вводить ваши ошибки.Часто URL будет работать нормально, потому что ваш браузер настроен на использование прокси-сервера.Вы можете установить параметры прокси в командной строке или в коде, см .: http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html.

0 голосов
/ 11 июня 2010

Этот код отлично работает для меня.

Если у вас очень медленное интернет-соединение, то причина в этом.Или вы загружаете / загружаете материал (http, torrents, ftp, ...)

Я вручную проверил URL, и он действителен, и содержит действительное изображение jpg.

Редактировать:

Вы проверяли это в браузере? Если это так, возможно, время ожидания больше.
Вы проверяли его в своей собственной сети с браузером?

Что это значит?

Исключение времени ожидания означает, что вы не можете создать Socket.Это может иметь несколько причин:

  • Сервер не отвечает.
    • Сервер очень занят.
  • Пакеты потеряны.Это также может иметь несколько причин:
    • Вы загружаете, и ваша широкополосная сеть переполнена.
    • Вы находитесь далеко от "центральных" интернет-провайдеров.(Вы живете в стране)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...