rießiger try - catch - Block

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Kann ich irgendwie um meine gesamte Anwendung einen try-catch-block legen? So könnte ich besser Unerwartede Fehler abfangen.
 

Bleiglanz

Gesperrter Benutzer
ja, aber ist i.A. nicht so besonders toll

denn wenn irgendwo "Mittendrin" eine Exception fliegt, dann kannst du darauf ja nicht richtig reagieren, sondern nur loggen?

besser man fängt die Fehler dort ab, wo Sie auftauchen (und wo man ggf. noch "Gegensteuern" kann)
 

messi

Bekanntes Mitglied
Du könntest eine Klasse mit main()-Methode schreiben, die die main()-Methode der Anwendung aufruft und die geworfenen Ausnahmen auffängt und dann die Anwendung ggf neustartet.
 

mic_checker

Top Contributor
teil einfach wo möglich in passende methoden auf, wo du sie da direkt catchst oder halt wirfst und die aufrufende methode sich drum kümmert....

ich mach in der regel oft recht viele try..catch Blöcke. Finde ich übersichtlicher und du weisst direkt wo's hapert...
 

The_S

Top Contributor
@ Bleiglanz und mic_checker

Hm, hab mich wohl ein bisschen ungünstig ausgedrückt. Ich fange natürlich in den Methoden selber die einzelnen Exceptions (also auch nicht nur mit
Code:
catch (Exception e)
sondern gescheit mit z. B.
Code:
catch (NumberFormatExeption e) {
// Exceptionhandling
}
catch (IOException e) {
...
was halt so anfällt :wink: .)

Mein Programm liest aber Daten ein, die ein unveränderbares Format haben und auch nicht immer sofort gebraucht werden. Wenn jetzt aus irgendeinem Grund (Bug, der User hat gepfuscht) die Daten ein anderes Format haben, bekomme ich Probleme mit meinem Exceptionhandling. Deswegen würd ich gerne nen rießigen try-catch-block um meine Anwendung zimmern, die alles, was nicht auf gewöhnlichen Weg gefangen werden kann (also wirklich unerwarted) abfängt und nen kritischen Fehler auswirft.

@ messi

Versteh ich net ganz. Kannst das nochmal für dumme erklären :wink: ?

[edit]

@ messi, jetzt hab ichs gecheckt, scheint aber net ganz sauber zu sein oder?
 

Semerzo

Aktives Mitglied
Ich halte es auch für Sinniger die Exeptions da zu behandeln, wo sie geschehn. Du könntest natürlich an alle Methoden throws schreiben
Code:
public meineMethode(...) throws Exception
Dann werden die Fehler weiter nach oben gereicht und warten dort auf Behandlung. Aber dann weisst du, wie mic_checker es beschreibt, eben nicht mehr wo etwas schief gelaufen ist.

Edit
Hab grade dein Respose gelesen:
Das Exceptions wollen gefangen werden, du willst Errors behandeln. Das sind Dinge wie OutOfMemoryError, dazu musst du ganz Aussen halt eben diese fangen. Wie Exeptions haben Error einen Obertyp, der eben Error heisst ...
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Error.html

Code:
public static main(String[] args) meineApp {
  try {
    new MeineApplikation();
  catch(Error e) {
    String messsage = "Ein unerwarteter Fehler ist aufgetreten:\n" + 
      e.getMessager();
    JOptionPane.showMessageDialog(null, message);
  }
}

Error sind die Dinge, die unter Windows ein Blue wären, unerwartete Fehler. So wie ich dich verstanden habe, willst du genau auf soetwas reagieren.
 
B

Beni

Gast
Hm, ich mach jeweils ein "try{ grosser Teil der Applikation }catch( Throwable t ){...}"-Block. Mit Throwable wird alles abgefangen, was herumfliegt (und mir durch alle anderen Sperren durchfällt, was selten ist :wink: )
 

The_S

Top Contributor
Es dreht sich schon um Exceptions. Nur da der Fehler an so ziemlich jeder Stelle im Programm auftreten kann (da überall die gelesenen Daten verarbeitet werden) und es auch verschiedene seien können (oft habe ich z. B. ArrayOutOfBounds oder ne NumberFormat Excpetion), könnte ich meinen Code sehr vereinfachen, wenn ich nicht jede Methode in einen Try-Catch-Block legen müsste, obwohl ich sowieso bei dieser Art von Fehler immer das selbe Exceptionhandling habe, sondern einen großen try-catch Block, in dem dann alles drinliegt, außenrum baue. Ich hoffe jetzt is klar was ich mein :wink: . Dennoch danke für deinen Beitrag Semerzo

[edit]

Beni hat gesagt.:
Hm, ich mach jeweils ein "try{ grosser Teil der Applikation }catch( Throwable t ){...}"-Block. Mit Throwable wird alles abgefangen, was herumfliegt (und mir durch alle anderen Sperren durchfällt, was selten ist :wink: )

genau sowas möchte ich! Gibts eine Möglichkeit das auf die komplette Applikation zu beziehen?
 

AlArenal

Top Contributor
Sinniger ist es wohl die Daten beim Einlesen zu validieren. Wenn danach noch Fehler auftreten, war die Validierung scheiße bzw. sind die Regeln nicht hinreichend definiert. Gegen Unwissenheit und Dummheit des Proggers hilft aber auch kein try-catch der Welt ;)
 
R

Roar

Gast
am einfachsten ist wohl einen default uncaughtexceptionhjandler (Thread) zu setzen. für java < 1.5 kannst du uncaughtExceptino() in ThreadGroup überschrieben
 
B

Beni

Gast
@Hobbit: such dir die unterste Methode... irgendwo startet ja dein Algorithmus. "Ganz" um dein Programm legen geht wohl nur, wenn du nur Konsolenprogramme schreibst (dann wäre es um "main( String[] args)" herum).

Du kannst auch mit "Thread.setDefaultUncaughtExceptionHandler" eine Allgemeine Behandlung von nicht abgefangenen Fehler machen. Aber seltsamerweise vertragen sich modale Dialoge und der UncaughtExceptionHandler nicht (er wird einfach nicht aufgerufen).

@AlArenal & co: wenn ich die Wahl zwischen "Scheisse, übler Programmierfehler, ich lass einfach alles durchrasseln" und "Scheisse, übler Programmierfehler, aber ich schreib wenigstens den Stacktrace in ein Log, und kann so vielleicht einfacher den Fehler reproduzieren" habe, wähle ich die zweite Variante...
 

The_S

Top Contributor
Danke, dann werd ich mal schauen, ob ich setDefaultUncaughtExceptionHandler verwende, oder doch besser den Block um einen Großteil meines Programmes lege.
 

AlArenal

Top Contributor
@Beni:

Das Problem ist ein anderes. Hobbit schrieb:

Mein Programm liest aber Daten ein, die ein unveränderbares Format haben und auch nicht immer sofort gebraucht werden. Wenn jetzt aus irgendeinem Grund (Bug, der User hat gepfuscht) die Daten ein anderes Format haben, bekomme ich Probleme mit meinem Exceptionhandling

Von daher ist laut Hobbit die Ausgangslage nicht "Ich möchte ganz allgemein mitloggen, für den Fall der Fälle", sondern eher "Ich traue meinem Kram nicht und entwickle Bananensoftware (reift beim Kunden)" ;)

Exceptionhandling sollte kein Ersatz dafür sein ein Programm durchdacht zu entwickeln und gut zu testen. Datenformat und Usereingaben sollten wasserdich definiert sein, ebenso wie die Logik. Andernfalls kann ich natürlich für mein Programm nie garantieren, dass es das tut was es soll - weil es das nicht weiß.

Unit-Tests sollen ne dolle Sache sein. Lieber einen Tag mehr testen als einen Bug vom Kunden entdecken lassen...
 

The_S

Top Contributor
Um die Sache aufzuklären:

Ich schreibe zusätzlich zu den Exceptions einen log eintrag (ansonsten nicht). Das Programm ist nicht kommerziell, also nur Just For Fun und somit nicht für irgendeinen Kunden (der das Recht hätte sich zu beschwehren :wink: ). Zum testen geb ich das ein paar Personen (ich teste natürlich auch selbst, aber allein kommt man nicht immer auf alles :bahnhof: ), die sich so dämlich (eigentlich schon wieder genial in dieser Hinsicht) anstellen, dass die noch bei jedem Programm nen Fehler gefunden haben. Und da es sich hierbei um echte DAUs handelt, mach ich lieber ein jar draus und möchte die Fehler über eine Meldung (JOptionPane) am Bildschirm ausgeben, anstatt über die Konsole was bei einem nicht behandelten Fehler sich schwierig gestalten dürfte :roll: .
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
M IndexOutOfBoundsException / Try-Catch Allgemeine Java-Themen 9
K Zweifacher Try-Catch Allgemeine Java-Themen 6
ralfb1105 LogManager logger schreibt nicht in Catch() Zweig Allgemeine Java-Themen 2
C try-catch Block Verständnisfrage Allgemeine Java-Themen 14
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
C Unendlich Wiederholungsfehler bei try catch - Block Allgemeine Java-Themen 3
H try catch Allgemeine Java-Themen 4
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
E Immer nur der Catch-Zweig Allgemeine Java-Themen 3
N String aus Try/Catch-Block übernehen Allgemeine Java-Themen 14
B Execption auf Oberfläche werfen, try-catch-Block Allgemeine Java-Themen 6
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
R return in try-catch-Blöcken Allgemeine Java-Themen 6
I Exceptions - weder catch- noch finally-Klausel funktioniert Allgemeine Java-Themen 12
F try und catch Blöcke Allgemeine Java-Themen 3
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
P Methodenaufruf von catch Allgemeine Java-Themen 2
S native methoden in try / catch ? Allgemeine Java-Themen 3
V Was tun mit "nötigen" Catch-Blöcken? Allgemeine Java-Themen 3
V Try-Catch und Code der folgt? Allgemeine Java-Themen 3
B Try/Catch in While-Schleife mit Scanner - Hilfe! Allgemeine Java-Themen 3
E try/catch Block um ganzes Programm Allgemeine Java-Themen 10
M try-catch (Wie erzwing ich die catch-Anweisung)? Allgemeine Java-Themen 13
L Try ... Catch Allgemeine Java-Themen 3
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
Neumi5694 Lambda - Block vs "Anweisungsliste" Allgemeine Java-Themen 8
I Java Optionals mit return-Block Allgemeine Java-Themen 2
B Sudoku-Block-Prüfung Allgemeine Java-Themen 1
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
T Warum ein privileg block? Allgemeine Java-Themen 0
H Probleme mit finally-Block und close() Allgemeine Java-Themen 4
G Initialization Block? Allgemeine Java-Themen 8
A Annotation einer Subklasse im static-Block auslesen. Allgemeine Java-Themen 6
E JNA:Zugriff auf Common-Block von Fortran bzw. Struct in C Allgemeine Java-Themen 2
J synchronized block mit this und wait() Allgemeine Java-Themen 5
D break block by label Allgemeine Java-Themen 14
M Konstruktor / statischer Block Allgemeine Java-Themen 13
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
G GC Warning: Repeated allocation of very large block Allgemeine Java-Themen 35
conan2 static-Block in Klassen Allgemeine Java-Themen 6
H Ein synchronized Block ausreichend? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben