Brak exception

0

Witam,
ma ktoś pomysł, dlaczego poniższy fragment kodu:

Image img;
try {
    img = ImageIO.read(new URL("http://www.strona.pl/obraz.jpg"));
    System.out.println(img);
} catch (Exception e) {e.printStackTrace();}

w przypadku, jeżeli plik: 'http://www.strona.pl/obraz.jpg' NIE istnieje, nie wyrzuca Exception? W dodatku, konsola w takim przypadku, daje mi Output
null
(innymisłowy: zmienna 'img' jest null). Dokumentacja wyraźnie mówi (przy metodzie 'read' dla ImageIO):

Throws:
IllegalArgumentException - if input is null. 
IOException - if an error occurs during reading.

Czyli, analizując, jeżeli otrzymuję zmienną 'img==null' (o czym informuje mnie Output), znaczy to, że input był 'null', dlaczego nie otrzymuję więc IllegalArgumentException?
Zaznaczę, że błąd NIE występował, jeżeli testowałem program offline (gdy adres url odwoływał do miejsca na moim komputerze) - wtedy otrzymywałem w takim wypadku ładne Exception. Gdy przeniosłem to na 'sieć' (obraz.jpg umieszczony na serwerze w sieci), zaczął się powyższy problem. Pozdrawiam

0

Obiekt typu URL który podajesz nie jest nullem, dlatego metoda nie rzuca wyjątku.

Jak byk pisze też:

If no registered ImageReader claims to be able to read the resulting stream, null is returned.

( ... )

Returns:
a BufferedImage containing the decoded contents of the input, or null.

Czyli wszystko w porządku.

0

ok, racja, nie doczytałem o tym, że .read może zwrócić w takiej sytuacji nulla. Ale w takim razie, zadam te pytanie z innej strony, bo dalej wydaje mi się, że coś jest nie tak ;).
W przypadku (nie wiem czy to ma jakieś znaczenie, ale faktem jest, że te linie kodu inaczej zachowują się w dwóch różnych przypadkach u mnie) jeżeli za url podaję ścieżkę do pliku znajdującego się na moim komputerze (po ip wewnętrznym), dla NIEistniejącego pliku 'obraz.jpg', uzyskuję exception:

javax.imageio.IIOException: Can't get input stream from URL!
    at javax.imageio.ImageIO.read(ImageIO.java:1369)
    (...)

Dlaczego dla tak samo NIEistniejącego pliku w sieci (do którego odwołuje ten url) nie mam tego samego wyjątku?

0

Mimo wszystko serwer dał odpowiedź (404), więc Exceptiona nie ma. System operacyjny za to wywalił Exceptiona przy próbie odczytu nieistniejącego pliku. Serwer HTTP ustawia kod błędu w headerze, ale mimo wszystko coś tam wysyła i potem to coś jest dekodowane. Dekodowanie się nie powodzi, dlatego metoda zwraca nulla.

0

o, o taką odpowiedź mi chodziło, konkretnie wyjaśnione :). Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1