# JOP.showInputDialog: Abbrechen Button-Funktion beenden



## Louis2 (1. Nov 2005)

Hallo,

es gab dazu schonmal nen Thread dazu, aber der war abgeschosslen... hab zwar ungefähr das selbe Problem aber auch noch eine weitere Frage. Und zwar will ich, dass
1. nach dem drücken von OK überprüft wird ob was eingegeben wurde, wenn nicht erscheint ei Hinweis und der showInputDialog wird wieder angezeigt-solange bis was eingegeben wurde, dann geht es weiter.
2. wenn Abbrechen gedrückt wurde, muss die Prozedure/Funktion beendet werden. Wie mache ich das am besten, in delphi gibt es ja exit, wie siet es hier aus?

Das ganze muss immer wiederholt werden, also while-Schleife oder? Man kann es auch wie im Thread oben mit if...else machen, nur ich brauche noch ee Wiederholungsschleife... 


```
.
.
else if ((main.LogSchalter.equalsIgnoreCase("no")) 
&& (main.DataAttached.equalsIgnoreCase("no") | main.DataAttached.equals("") | main.DataAttached.equalsIgnoreCase("yes")))
{
    messageSendLog();
}
.
```


```
public void messageSendLog()
{
    answ = JOptionPane.showInputDialog(this, "Email subject title", "Email subject", JOptionPane.INFORMATION_MESSAGE);

    if(answ.equals("")) 
    { 
        //Funktion beenden 
    } 
    else 
    { 
        try 
        { 
            if (main.DataAttached.equalsIgnoreCase("yes"))
            {
                Object fname = JOptionPane.showInputDialog(this, "Excel file name title", 
"Excel file name", JOptionPane.INFORMATION_MESSAGE);
            }
            .
            .    
        } 
        catch( NumberFormatException ex ) 
        { 
            JOptionPane.showMessageDialog(null, "No input, please give us a title", "Message", JOptionPane.ERROR_MESSAGE);
            answ = JOptionPane.showInputDialog(this, "Email subject title", "Email subject", JOptionPane.INFORMATION_MESSAGE);
            // und wieder zurück zu der if Bedingung, wie Schleife? 
        } 
    }
}
```


----------



## Louis2 (2. Nov 2005)

Keiner mit einem Hinweis?


----------



## Mag1c (3. Nov 2005)

Moin,

mir ist nicht ganz klar, was du eigentlich suchst. Mit "break" kannst du for/while-Schleifen vorzeitig verlassen. Mit "return" beendest du eine Methode an beliebiger Stelle.

Gruß
Mag1c


----------



## Sky (3. Nov 2005)

```
String answ = null;
    while ( answ == null || answ.length() == 0 ) {
      answ = JOptionPane.showInputDialog( this, "Email subject title", "Email subject", JOptionPane.INFORMATION_MESSAGE );
    }
```

Zeigt Dir solange den Dialog immer wieder an, wie keine Antwort eingegeben wird oder Abbrechen gedrückt wird. Ein gültige Eingabe ist vorhanden, sobald der Dialog mit OK beendet wird und answ mind. ein Zeichen enthält


----------



## Louis2 (3. Nov 2005)

Der Code ist schonmal gut, nur es müssen zwei Überprüfungen stattfinden:
1. Wurde was eingegeben, wenn nein bring die Meldung nochmal (ok mit der while Schleife überprüft)
2. Wenn Abbrechen gedrückt wurde, dann beende die Funktion (jedes mal diese Überprüfung vornehmen). Das war mein Problem, dass ich es nicht schaffe jedes mal diese Überprüfung zu machen

Wenn ich sowas mache kommt eine Fehlermeldung:

```
while (answ.length() == 0 ) 
{ 
      answ = JOptionPane.showInputDialog( this, "Email subject title", "Email subject", JOptionPane.INFORMATION_MESSAGE ); 
}
while (answ == null)
break; // oder return; kommt selber Meldung
```

Heißt das, dass er nicht richtig abbrechen kann oder das "Abbrechen" Button nicht richtig registriert? (So denke ich es mir...)

```
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at emailclient.EmailClient.messageSendLog(EmailClient.java:940)
        at emailclient.EmailClient.validMailAddressSender(EmailClient.java:764)
        at emailclient.EmailClient.actionPerformed(EmailClient.java:305)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
        at java.awt.Component.processMouseEvent(Component.java:5488)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1774)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
```


----------



## Sky (3. Nov 2005)

Naja, dann einfach die Bedingung ändern: Die Schleife muss solange durchlaufen werden, wie answ != null ist und die Länge gleich '0'.
answ==null oder answ.length() > 0 führen dazu, dass die Schleife beendet wird.


```
String answ = "";
    while( answ != null && answ.length() == 0 ) {
      answ = JOptionPane.showInputDialog( this, "Email subject title",
                                          "Email subject",
                                          JOptionPane.INFORMATION_MESSAGE );
    }
```


----------

