Programm stoppen - nicht beenden!

Maddili

Mitglied
hi, wie kann ich mein Programm stoppen, ohne es zu beenden (System.exit(0) )

Folgender Code:

Code:
 public static void erstellen(){

         auslesen_head();
         auslesen_options();
// [.....]
// Hier kommen noch weitere Befehle bzw. Methoden-Aufrufe.

Code:
    public static void auslesen_head(){


    	sopname = Output.tf_PrgNr.getText();

        // Prüfen, ob File bereits vorhanden ist
        File tempfile = new File(xml.getSettings("sopout"), sopname);



        if(tempfile.exists() ){
            System.out.println("File existiert bereits");

            //Dialog, ob gespeichert werden soll

            //Custom button text
            Object[] options = {"Ja",
                                "Nein",
                                "Abbruch"};
            int n = JOptionPane.showOptionDialog(new JFrame(),
                "Die Datei '" + Output.tf_PrgNr.getText()+".txt" + "' ist bereits vorhanden!" +
                "\n Datei überschreiben?",
                "Warnung!",
                JOptionPane.YES_NO_CANCEL_OPTION,
                JOptionPane.QUESTION_MESSAGE,
                null,
                options,
                options[2]);

            switch(n){
            case 0: System.out.println("case0");
            		if(Output.tf_Revision.getText().equals("")){
            			System.out.println("Revision ist leer");
            		}else{
            			System.out.println("Revision: " + Output.tf_Revision);
            		}            		break;
            case 1: System.out.println("case1");
            		DateiChooser.auswahlDatei();
                    break;

            case 2: System.out.println("Abbruch!");
            		break;


            }




        } else{
            System.out.println("File existiert noch nicht")	;

    }




Wie kann ich den rot gefärbten Code schreiben, dass wenn das "RevisionsFeld" tf_revision leer ist, das Programm nicht in der "erstellen"-Methode weitermacht

mfg
Maddin
 
Hallo,

ich glaube du musst da noch ein paar Sachen erklären. Was meinst du mit "Programm stoppen"? Also was soll das gewünschte Verhalten sein.

Wie kann ich den rot gefärbten Code schreiben, dass wenn das "RevisionsFeld" tf_revision leer ist, das Programm nicht in der "erstellen"-Methode weitermacht
Welche erstellen-Methode?

Gruß

Sascha
 
Moin,

was genau meinst Du mit "nicht weitermacht" :confused:
Soll das Programm an der Stelle einfrieren :confused: ==> programmiere eine Endlosschleife :-)
Willst Du warten, bis das Feld gefüllt ist :confused: ==> dann würde vlt. in einer Schleife den Wert solange abfragen, bis er nicht mehr leer ist
Willst gezielt aus Deiner Funktion "erstellen" aussteigen :confused: ==> dann hier mit 'break' rausgehen und (bspw. mit einem Rückgabeparameter) dafür sorgen, dass "auslesen_options()" nicht aufgerufen wird

Gruß
Klaus
 
Hui, das ging schnell... Also:

Hallo,

Welche erstellen-Methode?

Naja, ich rufe in der erstellen()-Methode die auslesen_head()-Methode auf. (und eben noch weitere Methoden)


vfl_freak hat gesagt.:
Willst Du warten, bis das Feld gefüllt ist ==> dann würde vlt. in einer Schleife den Wert solange abfragen, bis er nicht mehr leer ist

Hmm, hört sich gut an. Wie kann ich das umsetzen?


vfl_freak hat gesagt.:
Willst gezielt aus Deiner Funktion "erstellen" aussteigen ==> dann hier mit 'break' rausgehen und (bspw. mit einem Rückgabeparameter) dafür sorgen, dass "auslesen_options()" nicht aufgerufen wird

Hört sich auch gut an. Nur genau das ist mein Problem: Wie steige ich aus der "erstellen" Funktion aus?
Wenn ich in meiner Switch-Case nen Break mache, macht das Prog ja trotzdem mit der "erstellen"-Fkt. weiter. ->und genau das will ich nicht!

mfg Maddin
 
Zuletzt bearbeitet von einem Moderator:
Also wenn auslesen_head() in erstellen aufgerufen wird und du nicht möchtest, dass erstellen() weiter ausgeführt wird, wenn bei auslesen_head irgendwas passiert, könntest du es über einen Rückgabe-Parameter machen. Du könntest in auslesen_head einfach true zurück geben. Das kannst du dann bei erstellen abfragen, wenn true, dann mach weiter, wenn false, mach nicht weiter.

Willst Du warten, bis das Feld gefüllt ist ==> dann würde vlt. in einer Schleife den Wert solange abfragen, bis er nicht mehr leer ist
Hmm, hört sich gut an. Wie kann ich das umsetzen?

Ich kenne dein Programm nicht, aber da hast du eventuell ein schlechtes Design, wenn du mit einer Schleife auf eine Eingabe im Textfeld warten musst.

Könntest du mal genau erklären was du da machen möchtest?

Gruß

Sascha
 
Moin,

Hmm, hört sich gut an. Wie kann ich das umsetzen?

na, etwa so (an der 'roten' Stelle:
Java:
while( Output.tf_Revision.getText().equals("") )
{
    System.out.println("Warten, da die Revision ist leer");
}


Hört sich auch gut an. Nur genau das ist mein Problem: Wie steige ich aus der "erstellen" Funktion aus?
Wenn ich in meiner Switch-Case nen Break mache, macht das Prog ja trotzdem mit der "erstellen"-Fkt. weiter. ->und genau das will ich nicht!

bspw. so (ist aber VHIDT (!):p)
Java:
// statt "void auslesen_head()" bspw.:
boolean auslesen_head()
{
    boolean bResult = true;
    // ...
    case 0: 
        if(Output.tf_Revision.getText().equals(""))
        {
            System.out.println("Revision ist leer");
            bResult = false;
        }
        else
        {
            System.out.println("Revision: " + Output.tf_Revision);
        }
    // ...
    return bResult;
}   

// ...

public static void erstellen()
{
     boolean bRes = auslesen_head();
     if( true == bRes )
     {
         auslesen_options();
    }
}

Gruß
Klaus
 
Zuletzt bearbeitet:
Könntest du mal genau erklären was du da machen möchtest?

Also per Button wird erstellen() aufgrufen. In der Funktion werden weitere funktionen aufgerufen, welche aus Textfeldern, Checkboxes usw. Werte/Daten auslesen.
Letztendlich wird mit den ausgelesenen Daten eine Textdatei erstellt.

So, jetzt habe ich in der auslesen_head() eine abfrage, ob ich (wenn der Dateiname gleich ist) die Datei überschreiben will.
Bei klick auf "JA" soll er überprüfen, ob im Textfeld Revision etwas steht (Was wichtig ist, wenn man die Datei überschreibt - hier soll rein, WER, WANN und WAS geändert wurde.)

Also in meinem Code, wo jetzt (rot) steht: System.out.println("Revision ist leer"); Soll jetzt das Programm abbrechen - damit sowohl die auslesen_head(), als auch die erstellen() Funktion stoppen (-> jetzt wird noch mit der erstellen() weitergemacht und die txt-Datei geschrieben.) Also brauche ich HIER einen "Stop-Befehl" (wenns sowas gibt)

Sorry, wenn ic hmich so schwammig ausdrücke, aber ich bin nicht so der Java-Rul0r.

mfg
Maddin
 
Zuletzt bearbeitet von einem Moderator:
  1. Einen OptionDialog brauchst du nicht, für deine Zwecke ist ein ConfirmDialog völlig aureichend.
  2. Du kannst von jeder Stelle aus deine Funktion mit return abbrechen, auch wenn du in einer Schleife oder einem switch-case bist.
  3. Man muss nicht alles mit einem switch erschlagen wollen, manchmal sind if-Abfragen sinnvoller.
Beispiel:
Java:
//
  private static boolean test()
  {
    String str = "Testtext";
    int ret 
    = JOptionPane.showConfirmDialog(null//this
    , str
    , "Info"
    , JOptionPane.YES_NO_CANCEL_OPTION);
    if ( ret == JOptionPane.CANCEL_OPTION )
    { return false;}
    // hier kannst du noch mehr Anweisungen folgen lassen
    return true;
  }
 
vfl_freak hat genau das gezeigt was ich meine. Das wäre bei deinem Programm die beste Lösung.

Richtig implementiert sollte es so aussehen

- User klickt Button. -> Abfrage -> Ja -> Textfeld leer ->Nichts passiert -> User muss wieder auf Button klicken
- User klickt Button -> Abfrage -> Ja -> Textfeld nicht leer -> weitere Bearbeitung.

Gruß

Sascha
 
Howdie.

Solche Überprüfungen würde ich auch nur Event-basiert durchführen, wie Sascha & co. bereits gesagt haben.
Ein grobes Beispiel, wie ich es (vor langer Zeit) mal gelöst habe, ohne dass ein Button gedrückt werden muss:
Als Eingabefeld habe ich ein JFormattedTextField genommen und seinem Datenmodell über
Java:
myField.getDocument().addDocumentListener(myDocListenerInstance);
einen Listener hinzugefügt. Müsstest du aber auch mit einem normalen JTextField und einem ActionListener machen können, es waren halt recht spezielle Anforderungen damals.
Die Methoden zum Abfangen der Events des Listener-Interfaces rufen eine von mir geschriebene Validierungs-Methode auf, die überprüft, ob alle nötigen Daten vorhanden sind und dementsprechend reagiert.

Gruß und viel Erfolg
miffi
 
Zurück