Das folgende kleine Java-Programm verursacht eine IllegalArgumentException beim Aufruf von getResponseMessage:
public class Versuch1g {
public static void main(String[] args) {
BufferedReader in = openURL("http:/www.java-forum.org/");
if (in != null) {
try {
String s;
while ((s = in.readLine()) != null) {
System.out.println(s);
}
in.close();
} catch (IOException e) {
;
}
} else {
System.out.println("URL fehlerhaft oder nicht vorhanden.");
}
}
public static BufferedReader openURL(String s) {
try {
URL url = new URL(s);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setInstanceFollowRedirects(false);
System.out.println(con.getResponseMessage());
return new BufferedReader(new InputStreamReader(
con.getInputStream()));
} catch (MalformedURLException e) {
return null;
} catch (IOException e) {
return null;
} catch (IllegalArgumentException e) {
return null;
}
}
}
De Ursache ist natürlich, dass die URL nur ein / enthält und daher als Host null gesetzt wird. Warum wird die Exception aber nicht durch das catch gefangen? Wenn ich die ResponseMessage oder den ResponseCode nicht abrufe, dann funktioniert die Funktion, es wird eine IllegalArgumentException der nächsten Anweisung gefangen und null als Ergebnis geliefert.
public class Versuch1g {
public static void main(String[] args) {
BufferedReader in = openURL("http:/www.java-forum.org/");
if (in != null) {
try {
String s;
while ((s = in.readLine()) != null) {
System.out.println(s);
}
in.close();
} catch (IOException e) {
;
}
} else {
System.out.println("URL fehlerhaft oder nicht vorhanden.");
}
}
public static BufferedReader openURL(String s) {
try {
URL url = new URL(s);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setInstanceFollowRedirects(false);
System.out.println(con.getResponseMessage());
return new BufferedReader(new InputStreamReader(
con.getInputStream()));
} catch (MalformedURLException e) {
return null;
} catch (IOException e) {
return null;
} catch (IllegalArgumentException e) {
return null;
}
}
}
De Ursache ist natürlich, dass die URL nur ein / enthält und daher als Host null gesetzt wird. Warum wird die Exception aber nicht durch das catch gefangen? Wenn ich die ResponseMessage oder den ResponseCode nicht abrufe, dann funktioniert die Funktion, es wird eine IllegalArgumentException der nächsten Anweisung gefangen und null als Ergebnis geliefert.