Erste Schritte Eigene Fehlermeldungen bei Exceptions

Inf.-Student

Mitglied
Hallo.
Ich habe ein kleines Programm zum Herunterladen von Textdokumenten geschrieben, das eigentlich ganz gut funktioniert. Bloß mit Fehlermeldungen bin ich nicht zufrieden.
Zurzeit gebe ich einfach
Code:
Exception.toString()
aus. Die Fehlermeldungen sehen ungefähr so aus:
java.net.UnknownHostException: example.com
Stattdessen hätte ich gerne:
Host unbekannt: example.com
Das Problem ist, dass ich keine genaue Liste der möglichen Exceptions habe. In der Dokumentation von
Code:
HttpURLConnection
ist nur
Code:
IOException
angegeben.

Kann ich da etwas machen?

Hier mein Code:
Java:
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

public class Download {
	public static void main(String[] args) {
		String dlUrl, dlText;
		
		if (args.length > 0) { //Kommandozeilenparameter angegeben
			dlUrl = args[0];
		} else { //Keine Kommandozeilenparameter, frage nach
			System.out.println("Bitte URL eingeben:");
			Scanner inStrSc = new Scanner(System.in);
			dlUrl = inStrSc.next();
		}
		
		System.out.println("Lade: " + dlUrl); //Nochmal die Adresse
		
		try {
			dlText = download(dlUrl); //herunterladen
			
			System.out.println();
			System.out.println(dlText); //ausgeben
			System.out.println();
		} catch (IOException e) {
			System.err.println(e.toString()); //Fehlermeldung
		}
	}
	
	private static String download(String address) throws IOException {
		URL url = new URL(address);
		
		HttpURLConnection con = (HttpURLConnection) url.openConnection();
		con.setDoInput(true);
		
		InputStream inStr = con.getInputStream();
		
		int b;
		StringBuffer buffer = new StringBuffer();
		
		while ((b = inStr.read()) != -1)
			buffer.append((char) b);
		
		return buffer.toString();
	}
}
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Vermutlich suchst du
Code:
getMessage()
von [JAPI]Throwable[/JAPI], aber wieso sollte man sowas wollen?
 

Inf.-Student

Mitglied
aber wieso sollte man sowas wollen?
Ich möchte, dass mein Programm Fehlermeldungen ohne unnötigen Kauderwelsch wie Package- und Klassennamen und am besten auf Deutsch ausgibt.

Vermutlich suchst du
Code:
getMessage()
von [JAPI]Throwable[/JAPI]
Nein, die bringt mir leider nichts. Bei einigen Exceptions, wie z. B.
Code:
UnknownHostException
oben, sind diese Messages alleine nicht aussagekräftig.
 
G

Gast2

Gast
Entferne zunächst das
Code:
throws IOException
der Methode. Dann verrät eclipse dir welche Exceptions wo geworfen werden. Die kannst du dann verarbeiten.

Alternativ: in die API schaun.
 

Inf.-Student

Mitglied
Dann hast du vermutlich noch throws IOException im Methodenkopf stehen.
Eclipse sagt dir dann z.b. dass der Konstruktor von URL eine MalformedURLException werfen kann.

Du kannst in der API schauen welche Befehle welche Exception werfern.
Z.b.: URL (Java Platform SE 6)

Du hast recht. Leider sagt mir eclipse nicht, dass z. B. java.net.URLConnection.getInputStream() UnknownHostException werfen kann. Auch in der API steht das nicht.
Ich bin mir gar nicht sicher, ob ich diese Exception dann explizit abfangen darf, wenn sie nirgendwo dokumentiert ist.

PS
Jetzt, wo ich es mir genau anschaue, eclipse meckert seltsamerweise gar nicht über UnknownServiceException. Hat das vielleicht etwas damit zu tun, dass ich openjdk6 verwende?
 

Inf.-Student

Mitglied
Aber die API sagt dir, dass UnknownHostException von IOException abgeleitet wird
Sicher, aber ich verspüre jetzt nicht unbedingt einen großen Drang, jede von IOException abgeleitete Exception abzufangen, wo sie vielleicht gar nicht geworfen wird.

Das wäre ja an sich möglich, aber ich muss dann noch für jede Exception eine Fehlermeldung schreiben.
 
G

Gast2

Gast
Dann beschränk dich drauf da ne IOException zu fangen und gib ne entsprechende Meldung an den User raus.
 

hdi

Top Contributor
Das wäre ja an sich möglich, aber ich muss dann noch für jede Exception eine Fehlermeldung schreiben.
Ja aber das ist doch das, was du wolltest? Also entweder du sparst dir die Arbeit und sagst dem User "Fehler!", oder du gibts ne genaue Meldung aus, dann musst du das im Code auch unterscheiden. Entscheid dich ;)
 

Inf.-Student

Mitglied
Dann beschränk dich drauf da ne IOException zu fangen und gib ne entsprechende Meldung an den User raus.
Und wie soll die entsprechende Meldung aussehen? IOException wird geworfen z. B. wenn keine Verbindung zur Website oder auch wenn 404 HTTP Status Code vom Server geschickt wird oder wenn Timer abgelaufen ist. Ich würde gerne unterschiedliche Fehlermeldungen für unterschiedliche Fehler haben.
 
Zuletzt bearbeitet:
G

Gast2

Gast
Und wie soll die entsprechende Meldung aussehen?
"Ein Fehler ist aufgetreten, bitten wenden Sie sich an xy"
Den kompletten Stacktrace kannst du dann in ein Log file schreiben dass sich der Administrator anschauen kann.
 

hdi

Top Contributor
Ich würde gerne unterschiedliche Fehlermeldungen für unterschiedliche Fehler haben.
Nochmal: Wenn dir die Message, die sich die Leute von Sun für die Exception ausgedacht haben, nicht ausreicht, dann kommst du nicht drumherum jede einzelne Exception abzufangen und einen eigenen Text rauszuhauen. Natürlich kannst du dir dafür eigene Exceptions und Hilfsklassen schreiben, um die das Handling an verschiedenen Stellen im Programm zu erleichtern. Aber irgendwo musst du das halt tun.
 

Inf.-Student

Mitglied
"Ein Fehler ist aufgetreten, bitten wenden Sie sich an xy"
Den kompletten Stacktrace kannst du dann in ein Log file schreiben dass sich der Administrator anschauen kann.

Also stell dir bitte einen Browser vor (als Beispiel für ein Programm, das Text über HTTP herunterlädt).
Es wäre doch etwas seltsam, wenn das Ding dich bei jedem 404-Fehler zum Administrator schicken würde.
 

Inf.-Student

Mitglied
Nochmal: Wenn dir die Message, die sich die Leute von Sun für die Exception ausgedacht haben, nicht ausreicht, dann kommst du nicht drumherum jede einzelne Exception abzufangen und einen eigenen Text rauszuhauen. Natürlich kannst du dir dafür eigene Exceptions und Hilfsklassen schreiben, um die das Handling an verschiedenen Stellen im Programm zu erleichtern. Aber irgendwo musst du das halt tun.

Es gibt keine Beschreibung, welche Exceptions bei welchen Fehlern geworfen werden. Raten dürfte etwas schwierig werden.
 
G

Gast2

Gast
In deiner Java installation müsste es einen src.zip Datei geben, die kannst du z.b. in Eclipse einbinden.
 

HoaX

Top Contributor
Es gibt auch Throwable#getLocalizedMessage, dann is die Nachricht manchmal schon übersetzt. Aber mal ehrlich: Wenn ich so genaues Fehlerhandling für HTTP haben will, dann benutz ich nicht URL sondern z.B. Apache HTTPClient.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Amina556 Eigene Klasse definieren Java Basics - Anfänger-Themen 9
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
T Datentypen Eigene Datentypen Java Basics - Anfänger-Themen 15
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
G eigene Bibliothek einbinden Java Basics - Anfänger-Themen 1
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
P Maven und eigene Jars Java Basics - Anfänger-Themen 4
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
A Eigene Methoden entwicken Java Basics - Anfänger-Themen 3
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
H GSON-Bibliothek für eigene Programme benutzen Java Basics - Anfänger-Themen 2
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
R eigene Graphikbedienelemente Java Basics - Anfänger-Themen 8
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
G eigene Bibliothek in Java importieren Java Basics - Anfänger-Themen 5
D Klassen Eigene Klasse für ArrayList Java Basics - Anfänger-Themen 6
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
O Denkanstöße für eigene Konfigurations-Datei Java Basics - Anfänger-Themen 12
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C eigene Exception Java Basics - Anfänger-Themen 4
M externe JARs in die eigene JAR einbinden Java Basics - Anfänger-Themen 9
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
E Eigene Stackklasse Java Basics - Anfänger-Themen 7
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
N Eigene Methoden-> Werte übergeben Java Basics - Anfänger-Themen 5
U Klassen Eigene Klassen importieren Java Basics - Anfänger-Themen 13
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
B OOP Eigene Objekte in Arrays zusammenfassen Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
G Eigene MessageBox kreieren Java Basics - Anfänger-Themen 9
F Klassen Eigene Klasse definieren Java Basics - Anfänger-Themen 4
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
X Eigene Libary Java Basics - Anfänger-Themen 2
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
T eigene Exception Klasse Java Basics - Anfänger-Themen 12
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
F Eigene Klasse für die Keys von HashMap Java Basics - Anfänger-Themen 5
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
G Eigene Klasse als Array, zugriff? Java Basics - Anfänger-Themen 2
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
dataframe OOP Eigene typisierte Liste Java Basics - Anfänger-Themen 3
W GUI als eigene Klasse oder in die Startklasse? Java Basics - Anfänger-Themen 21
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
H Buttonbefehle in eigene Klasse schreiben Java Basics - Anfänger-Themen 8
M Datentypen Eigene iterierbare Liste Java Basics - Anfänger-Themen 4
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
S Klassendiagramm - nur eigene Klassen? Java Basics - Anfänger-Themen 3
nrg Eigene simple List-Klasse programmieren Java Basics - Anfänger-Themen 3
C Eigene Interpreter-Programmiersprache mit Java Java Basics - Anfänger-Themen 17
B eigene Exception.... Java Basics - Anfänger-Themen 5
N Java Programm soll Datei in eigene jar schreiben Java Basics - Anfänger-Themen 13
F Eigene Exception StackTrace und Message ist leer warum??? Java Basics - Anfänger-Themen 3
M Eigene Pakete in Eclipse erstellen Java Basics - Anfänger-Themen 5
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
H eigene Schriftarten registrieren Java Basics - Anfänger-Themen 5
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
M Eigene LinkedList und Nodes Java Basics - Anfänger-Themen 20
S eigene Methoden in JDialog Java Basics - Anfänger-Themen 13
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben