JOptionPane funktioniert nicht mit Abbrechen Knopf

REC

Bekanntes Mitglied
Habe hier folgendes Problem.Ich öffne ein
Java:
  JOptionPane pane = new JOptionPane(kartei,
                    JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_OPTION);
So ich will 2 Zahlen eingeben.Wenn ich nun auf den Abbrechen Knopf gehe oder das Fenster schliessen will,kommt eine Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" .

So wie kann ich nun das umgehen.Egal wie!



Java:
class karteLöschenListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            JTextField posKartei = new JTextField();
            JTextField posKarte = new JTextField();

            Object[] kartei = { "Geben Sie die gewünschte Kartei ein ",
                    posKartei, "Geben sie die gewünschte Kartenposition ein ",
                    posKarte };

            JOptionPane pane = new JOptionPane(kartei,
                    JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_OPTION);
          
            
            pane.createDialog("Karte löschen").setVisible(true);
        
            int z = Integer.parseInt(posKartei.getText());
            int y = Integer.parseInt(posKarte.getText());
            logRef.karteLöschen(z,y);
    

        }

    }
 
Du überprüfst ob
Code:
posKartei.getText()
und
Code:
posKarte.getText()
gesetzt sind?
 
Wie meinst du das?Wenn ich ja nichts eingeben will,oder nur ein Feld ausgefüllt habe,und ich entscheide mich dann um abbzubrechen,dann nützt mir es ja nichts die Textfelder zu überprüfen?
 
Naja, du bekommst die Exception weil egal ob du was eingegeben hast oder nicht versuchst du die Eingabe nach Integer zu parsen. Das musst du eben verhindern
 
Sorry ich weiss nicht genau was du meinst.
Unsere Abgabetermin ist eben morgen Abend und wir wissen das wir deine Hilfe in letzter Zeit oft beansprucht haben,aber
kannst du mir nicht ein Code Beispiel schreiben?
 
Naja, erstens müsstest du überprüfen, ob eben wirklich nur Zahlen in dem Textfeld stehen(diese auch nicht leer sind) und zweitens ob "JA" geklickt wurde.

Codebeispiel? Möglich wäre so etwas:
Java:
		DocumentFilter filter = new DocumentFilter() {
			@Override
			public void replace(FilterBypass fb, int offset, int length,
					String text, AttributeSet attrs)
					throws BadLocationException {
				if (text.matches("\\d+")) {
					super.replace(fb, offset, length, text, attrs);
				}
			}
		};
		JTextField posKartei = new JTextField();
		((AbstractDocument) posKartei.getDocument()).setDocumentFilter(filter);
		JTextField posKarte = new JTextField();
		((AbstractDocument) posKarte.getDocument()).setDocumentFilter(filter);
		Object[] kartei = { "Geben Sie die gewünschte Kartei ein ", posKartei,
				"Geben sie die gewünschte Kartenposition ein ", posKarte };

		JOptionPane pane = new JOptionPane(kartei, JOptionPane.PLAIN_MESSAGE,
				JOptionPane.OK_OPTION);

		pane.createDialog("Karte löschen").setVisible(true);
		if (((Integer) pane.getValue()).intValue() == JOptionPane.OK_OPTION
				&& !posKarte.getText().isEmpty()
				&& !posKartei.getText().isEmpty()) {
			int z = Integer.parseInt(posKartei.getText());
			int y = Integer.parseInt(posKarte.getText());
			logRef.karteLöschen(z,y);
		}

😳
 
Was soll denn das 😳 bitte bedeuten??

Wie du vielleich anhand meinen Fragen sehen kannst bin ich blutiger Anfänger.
Da nützten mir solche Codebeispiele herzlich wenig bei denn ich praktisch jedes Wort herausfinden muss was es heisst.
Bevor ich sowas schreibe,mach ich mir ein eigenes JFrame.

Ist es also nur so möglich ?
 
Ist es also nur so möglich ?


Nö, viele Wege führen nach Rom, nur was bitte willst du nun jetzt sonst noch hören? Codebeispiel gefällt dir nicht, aus den o.g. Erklärungen selbst den Code schreiben kannst/willst du anscheinend nicht...was bitte willst du nun hören?
Du könntest auch einen try-catch drumwickeln wenn du das besser findest :autsch:
Java:
JTextField posKartei = new JTextField();
		JTextField posKarte = new JTextField();
		Object[] kartei = { "Geben Sie die gewünschte Kartei ein ", posKartei,
				"Geben sie die gewünschte Kartenposition ein ", posKarte };

		JOptionPane pane = new JOptionPane(kartei, JOptionPane.PLAIN_MESSAGE,
				JOptionPane.OK_OPTION);

		pane.createDialog("Karte löschen").setVisible(true);
		if (((Integer) pane.getValue()).intValue() == JOptionPane.OK_OPTION) { //wurde JA geklickt?
			try{
				int z = Integer.parseInt(posKartei.getText());
				int y = Integer.parseInt(posKarte.getText());
				logRef.karteLöschen(z,y);
			}catch(NumberFormatException nf){
				System.out.println("Na, das war aber keine Zahl!"); //eingabe war keine zahl oder es wurde keine eingabe getätigt...
			}
		}
 
Eigentlich nichts,ich wollte nur wissen ob es einen anderen Weg gibt.

Ok habe mir nochmal deinen oberen Code angeschaut.
An dieser Zeile war ich dran,aber ich bekam sie nicht hin.
Java:
 if (((Integer) pane.getValue()).intValue() == JOptionPane.OK_CANCEL_OPTION)

Ich schau jetzt mal im Web wegen der Überprüfung ob ein String oder int übergeben wurde.

Danke bis hierhin.
 
Man ich komm einfach nicht vorwärts.

Wie komme ich an den "X"Knopf des JOptionPane.Mit dem WindowsListener geht das ja nicht.Dieser Schliess Knopf sollte ja das gleiche machen wie dann der Abbrechen Knopf
 
Ja schliessen tut es schon aber es kommt der gleiche Fehler wie wenn ich vorher den abbrechen knopf gedrückt hatte.
Also dachte ich,ich muss mit dem WindowsListener die gleichen Schritten ausführen wie es jetzt der Abbrechen-Knopf macht
 
Also wie eRaaaa schon wunderbar gezeigt hat:
Nur eines fehlte noch, für den fall das einer auf X drückt.

Java:
if(pane.getValue() != null) // jetzt sollte keine Exception mehr kommen
   if (((Integer) pane.getValue()).intValue() == JOptionPane.OK_OPTION 
                && !posKarte.getText().isEmpty() // steht was in posKarte drin? 
                && !posKartei.getText().isEmpty()) { 
            int z = Integer.parseInt(posKartei.getText());
            int y = Integer.parseInt(posKarte.getText());
 
Ja schliessen tut es schon aber es kommt der gleiche Fehler wie wenn ich vorher den abbrechen knopf gedrückt hatte.
Also dachte ich,ich muss mit dem WindowsListener die gleichen Schritten ausführen wie es jetzt der Abbrechen-Knopf macht

schon der gleiche, aber nicht aus dem selben grund. jetzt liegt es daran, dass der Rückgabe Wert von pane.getValue null ist... und von null kann man nicht intValue aufrufen

Java:
 if (pane.getValue() != null && ((Integer) pane.getValue()).intValue() == JOptionPane.OK_OPTION) { //wurde JA geklickt?

immer wenn eine nullPointerrException kommt, schau zuerst wo genau, schau dann wer drauf zugreift und schreib den code dann so um, dass niemand drauf zugrieft, wenns null ist
 

Zurück
Oben