2017-03-01 33 views
0

Neu in Java, so dass jede Hilfe sehr geschätzt werden würde. Haben Sie ein kleines Problem mit der Datenüberprüfung in einem JTextField. Ein Benutzer wird gebeten, ihr Alter einzugeben, ob sie rauchen, und ob sie übergewichtig sind. Validierung für Rauchen und Gewicht funktioniert gut, so gilt die Altersgrenze, die ich eingestellt habe.JTextField Datenvalidierung

Wenn ich jedoch einen Buchstaben in der AgeField JTextField eingeben, scheint es zu stecken und die anderen Validierungsfehler nicht gedruckt. (ZB Es wird korrekt gedruckt "Alter muss eine ganze Zahl sein", aber wenn ich auch "h" in smokesField eingegeben, "Smoke Eingabe sollte Y, y, N oder n" würde nicht gedruckt werden.)

Sorry, Das ist eine lange und aufgeblasene Erklärung!

Auf jeden Fall hier ist der Code Ich habe Schwierigkeiten mit, danke:

public void actionPerformed(ActionEvent e) 
{ 
String ageBox = ageField.getText(); 
int age = 0; 

if (e.getSource() == reportButton) 
{ 
    if (ageBox.length() != 0) 
     { 
      try 
      { 
      age = Integer.parseInt(ageBox); 
      } 
      catch (NumberFormatException nfe) 
      { 
      log.append("\nError reports\n==========\n");  
      log.append("Age must be an Integer\n"); 
      ageField.requestFocus(); 
      }   
     } 
    if (Integer.parseInt(ageBox) < 0 || Integer.parseInt(ageBox) > 116) 
    { 
     log.append("\nError reports\n==========\n"); 
     log.append("Age must be in the range of 0-116\n"); 
     ageField.requestFocus(); 
    } 
    if (!smokesField.getText().equalsIgnoreCase("Y") && !smokesField.getText().equalsIgnoreCase("N")) 
    { 
     log.append("\nError reports\n==========\n"); 
     log.append("Smoke input should be Y, y, N or n\n"); 
     smokesField.requestFocus(); 
    } 
    if (!overweightField.getText().equalsIgnoreCase("Y") && !overweightField.getText().equalsIgnoreCase("N")) 
    { 
     log.append("\nError reports\n==========\n"); 
     log.append("Over Weight input should be Y, y, N or n\n"); 
     smokesField.requestFocus(); 
    } 
    } 
+0

die 2. 'Integer.parseInt (ageBox)' wirft Ausnahme – Jerry06

Antwort

0

Aus der Situation, die Sie beschrieben, ist es wahrscheinlich, dass die Linie

if (Integer.parseInt(ageBox) < 0 || Integer.parseInt(ageBox) > 116) 
{ 
... 

eine nicht behandelte Number wirft, da Sie haben einen Buchstaben in ageBox eingegeben. Sie erhalten die korrekte Ausgabe von "Age muss eine Ganzzahl sein" das erste Mal, seit Ihre Ausnahme von Ihrem Try/Catch-Handler abgefangen wird, aber dieses zweite Vorkommen hat keine solche Behandlung.

Um dies zu beheben, würde ich einfach, dass insbesondere bewegen, wenn Anweisung innerhalb der try-Blöcke, etwa so:

try 
    { 
     if (Integer.parseInt(ageBox) < 0 || Integer.parseInt(ageBox) > 116) 
     { 
      log.append("\nError reports\n==========\n"); 
      log.append("Age must be in the range of 0-116\n"); 
      ageField.requestFocus(); 
     } 
    } 
    catch (NumberFormatException nfe) 
    ... 

Auf diese Weise werden Sie immer noch die Ausgabe von Get „Alter muss eine ganze Zahl sein“, wenn ageBox hat einen ungültigen Eintrag und alles andere sollte gut laufen.

+0

Danke für die schnelle Antwort. Versuchte, was Sie vorgeschlagen haben und jetzt perfekt funktioniert. – RiceCrispy

+0

@RiceCrispy kein Problem, ich bin froh, dass Sie es hilfreich gefunden haben! –