# Programm beenden (Exit function?)



## Thebbe (8. Apr 2010)

Hallo liebe Gemeinde, 

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.

???:L

Vielen Dank gruß Björn


----------



## Foermchen82 (8. Apr 2010)

Also deine Überschrift passt nicht zum Text.

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!


----------



## Thebbe (8. Apr 2010)

Hallo Foermchen82, 

danke für die schnelle Antwort. 

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.

Vielen Dank

Gruß Björn


----------



## KrokoDiehl (8. Apr 2010)

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:

```
public void alsExcelSpeichernButtonKlick()
{
    try
    {
        speichereAlsExcel( daten );
    } 
    catch (IrgendeineAusnahme exc)
    {
        // hier zB ins Protokoll schreiben, Fehlermeldung bringen, ...
        exc.printStackTrace();
    }
}

public void speichereAlsExcel( Object daten ) throws IrgendeineAusnahme
{
    // irgendwie als Excel speichern, wenn ein Fehler auftritt, Ausnahme werfen, oder
    // andere Ausnahme werfen lassen

    if ( kannDieseDatenNichtAlsExcelSpeichern )
        throw new IrgendeienAusnahme("Ungültige Daten");
}
```
Sobald eine Ausnahme beim Speichern entsteht, bricht die Methode ab und der Aufrufer bekommt die Ausnahme mit. Wenn 
	
	
	
	





```
speichereAlsExcel()
```
 selbst Ausnahmen abfängt, dann merkt 
	
	
	
	





```
alsExcelSpeichernButtonKlick()
```
 das nie:

```
public void alsExcelSpeichernButtonKlick()
{
    speichereAlsExcel(daten);
    // und nun? Hats geklappt oder nicht?
}

public void speichereAlsExcel( Object daten ) throws IrgendeineAusnahme
{
    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.


Klingt nach einem 
	
	
	
	





```
return
```
:

```
public void eineMethode()
{
    if (irgendwasStimmtNicht)
        return;

    // arbeite
}
```


----------



## Foermchen82 (8. Apr 2010)

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.


----------



## Michael... (8. Apr 2010)

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.


----------



## Thebbe (8. Apr 2010)

Okay vielen Dank an alle Beteiligten.

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.

Vielen Dank euch allen.

Gruß Björn


----------

