Durch einen Button-Klick springe ich in eine Methode,
welche wiederum eine neue Methode aufruft.
Durch einen Try/Catch -Block fange ich dort einen Fehler ab und wenn er dort im Catch-Block landet, möchte ich gerne die Ursprungsmethode, in welche beim Button-Klick gesprungen wurde und die anderen Methoden, welche durch diese aufgerufen wurden beenden.
Ist zwar eine blöde Frage aber ich stehe wirklich auf dem Schlauch und ich bin noch nicht so im Thema Java drin.
Rein nach der Überschrift würde ich sagen: System.exit(0);
Laut deinem Text willst du das aber nicht.
Wenn du in einer Unter-Unter-Methode einen Fehler bekommst und dann wieder 2 Ebenen höher möchtest, warum fängst du dort überhaupt den Fehler ab? Mach doch den Try/Catch in der action-Methode des Buttons. Dann landest du automatisch dort!
In dieser Unter-Untermethode speichere ich eine Excel-Datei, welche ich zuvor mittels POI erstellt habe. Dort möchte ich dann beim FileOutputStream gucken, ob das Speichern erfolgreich war. Wenn dies nicht der Fall sein sollte, soll er mir eine Fehlermeldung bringen und das Programm beenden.
Ich habe vergessen zu erwähnen, das mein gestrikter Code nur ein Bruchstück von einem großen Projekt ist und ich nicht das ganze Programm beenden kann. Ich habe lediglich nur den Button hinzugefügt und den Quellcode der hinter diesem einen Button steckt realisiert.
Da hast du recht, dass die Themen wahl etwas unglücklich gewählt war.
Und dort kann ich dann einfach die Exception abfangen und reagieren?
Wie beendet man denn genau einen Code (Methode) in Java?
Ich habe bisher nur VBA programmiert und bin mich neu mit Java am befassen.
Grundsätzlich werden Ausnahmen in Java immer soweit "hochgereicht", bis sie an eine Stelle kommen, wo man sie behandeln kann/will. Das ist keine üble Praxis:
Java:
publicvoidalsExcelSpeichernButtonKlick(){try{speichereAlsExcel( daten );}catch(IrgendeineAusnahme exc){// hier zB ins Protokoll schreiben, Fehlermeldung bringen, ...
exc.printStackTrace();}}publicvoidspeichereAlsExcel(Object daten )throwsIrgendeineAusnahme{// irgendwie als Excel speichern, wenn ein Fehler auftritt, Ausnahme werfen, oder// andere Ausnahme werfen lassenif( kannDieseDatenNichtAlsExcelSpeichern )thrownewIrgendeienAusnahme("Ungültige Daten");}
Sobald eine Ausnahme beim Speichern entsteht, bricht die Methode ab und der Aufrufer bekommt die Ausnahme mit. Wenn
Code:
speichereAlsExcel()
selbst Ausnahmen abfängt, dann merkt
Code:
alsExcelSpeichernButtonKlick()
das nie:
Java:
publicvoidalsExcelSpeichernButtonKlick(){speichereAlsExcel(daten);// und nun? Hats geklappt oder nicht?}publicvoidspeichereAlsExcel(Object daten )throwsIrgendeineAusnahme{try{// speichern...}catch(Exception exc){}}
Zu deiner anderen Frage:
Wie beendet man denn genau einen Code (Methode) in Java?
Ich habe bisher nur VBA programmiert und bin mich neu mit Java am befassen.
aus einer Methode kommst du einfach mit "return";
Wenn du einen try-catch-block hast bruachst du die methode nicht explizit zu beenden wenn der Block den ganzen Inhalt umfasst. Wenn du am Ende der Methode angelangt bist, ist sie halt zu ende.
Zu deiner Frage mit dem Fangen der Exception: Wenn du einer RunntimeException hast, fliegt die so lange nach oben durch die MEthoden, bis du sie fängst. Bei einer Checked (Normalen) Exception musst du entweder innerhalb der Methode einen Try-Catch-Block machen, oder die Exception mit throws weiter werfen.
Du könntest die Exception weiterreichen, oder der Methode einen Rückgabewert (z.B) boolean geben, über den die aufrufende Methode erfährt, ob die die aufgerufene Methode erfolgreich abgearbeitet wurde.
Ich versuche nun mal mein Glück.
Wenn es Probleme geben sollte, wende ich mich nochmals an euch.
Danke
Gruß Björn
EDIT: Hat funktioniert. Ich habe beim Aufruf der speichernMethode mittels Try/Batch - Block den Fehler abgefangen und daraufhin mit einem return reagiert.