2017-10-31 20 views
1

コードに問題があります。ユーザーがCANCEL.OPTIONまたはCLOSED.OPTIONをクリックするとこのループを終了しようとしています。例外を処理しましたが、ウィンドウ上のボタンを使用できないようです。プログラムは、年齢の入力からユーザーの誕生日を取得します。私が抱えている問題は、ボタンを使ってループを終了できないということです。前もって感謝します!JOptionPaneでwhileループを終了するには

public Integer getBirthYear() { 
    boolean prompt = true; 
    while(prompt) { 
     String enteredAge = showInputDialog(null,"Enter age:"); 
     try { 
      age = Integer.parseInt(enteredAge); 
      if(age == JOptionPane.CANCEL_OPTION || age == JOptionPane.CLOSED_OPTION) { 
       System.out.println("MADE IT INTO IF"); 
      } 
      age = year - age; 
      prompt = false; 
      showMessageDialog(null,age); 
     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
     } 
    } 
    return age; 
} 
+0

tryとcatch節の外にpromp = falseを入れてください。 –

答えて

0

showInputDialogにはいくつかのパラメータがあります。最後のバージョンのjavadocだけが、ユーザーがキャンセルを押したときに戻り値がnullであることを正しく文書化しています。

public int getBirthYear() { 
    boolean prompt = true; 
    while (prompt) { 
     String enteredAge = showInputDialog(null,"Enter age:"); 
     if (enteredAge == null) { // Cancel pressed 
      age = -1; 
      prompt = false; 
     } else { 
      try { 
       age = Integer.parseInt(enteredAge); 
       age = year - age; 
       prompt = false; 
       showMessageDialog(null, age); 
      } catch (NumberFormatException e) { 
       showMessageDialog(null, "Enter a valid number"); 
      } 
     } 
    } 
    return age; 
} 

プログラムの再構成が必要な場合があります。年齢を地域変数などにする。整数値はintを使用してください。 Integerは、intのObjectラッパークラスです。あなたの質問へ

0

最も最も簡単な答えは、ちょうどあなたのtryとcatch節のpromp =偽の外に置かれ、それが動作するはずです:

public Integer getBirthYear() { 
boolean prompt = true; 
while(prompt) { 
    String enteredAge = showInputDialog(null,"Enter age:"); 
    try { 
     age = Integer.parseInt(enteredAge); 
     if(age == JOptionPane.CANCEL_OPTION || age == JOptionPane.CLOSED_OPTION) { 
      System.out.println("MADE IT INTO IF"); 
     } 
     age = year - age; 
     showMessageDialog(null,age); 
    } catch (NumberFormatException e) { 
     e.printStackTrace(); 
    } 
     prompt = false; 
} 
return age; 
} 
0

問題がスコープでいました。入力された年齢はそれをキャッチブロックに入れることではありませんでした。私はその問題を解決しました。

public Integer getBirthYear() { 
    boolean prompt = true; 
    do { 
     try { 
      age = year - Integer.parseInt(showInputDialog(null,"Enter age:")); 
      prompt = false; 
      showMessageDialog(null, age); 
     } catch (NumberFormatException e) { 
      String ageEntered = showInputDialog(null,"Enter age:"); 
      e.printStackTrace(); 
      if(ageEntered == null) { //close the file if Cancel is chosen 
       prompt = false; 
      } 
     } 
    } while(prompt); 
    return age; 
} 
関連する問題