2012-03-22 21 views
1

ユーザー名とパスワードを要求するこのコードがあります。ちょうど単純なJOptionPaneです。プログラムは入力を要求し、ユーザーがユーザー名に入力を書き込んでいない場合は、エラーメッセージを表示し、前と同じダイアログボックスにユーザー名を入力する必要があります。しかし、それはそのようには機能しません。何も入力しなくても、パスワードダイアログボックスに進みます。私の論理をチェックしてください、私はちょっと混乱しているかもしれません。 showInputDialogの入力が文字列かどうかを確認する方法もありますか?整数の場合はNumberFormatExceptionのようになりますか? catchメソッドの例外は動作しません。 :) 前もって感謝します。JOptionPane。プログラムにエラーメッセージが表示されない

public class SwingExercise { 

public static void main(String[] args) { 


    String name = null; 
    boolean input = true; 

    try { 
     while (input) { 
      while (name == null) { 
       name = JOptionPane.showInputDialog(null, "Enter username:"); 
       if (name == null) { 
        JOptionPane.showMessageDialog(null, "No input.", "Error", JOptionPane.ERROR_MESSAGE); 
       } 
      } 
      String pw = JOptionPane.showInputDialog(null, "Enter password:"); 
      input = false; 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, "Invalid input.", "Error", JOptionPane.ERROR_MESSAGE); 

    } 


} 
+0

あなたは大歓迎であり、笑っています:-) –

+0

'JOptionPane.showInputDialog(null、"パスワードを入力: ");' ['JPasswordField']を使用してください(http://docs.oracle.com/javase/7 /docs/api/javax/swing/JPasswordField.html)を使用してパスワードを取得します。詳細については、[パスワードフィールドの使用方法](http://docs.oracle.com/javase/tutorial/uiswing/components/passwordfield.html)を参照してください。 –

+0

@Layne:あなたのコードを修正したことを見て、Andrew Thompsonが言っていることを見てください:-) –

答えて

3

これは、問題を解決する必要があります:

if(name == null || name.equals("")) { 
    JOptionPane.showMessageDialog(null, "No input.", "Error", JOptionPane.ERROR_MESSAGE); 
    name = null; 
} 

と、この質問について:

もshowInputDialog入力が文字列であるかどうかを確認する方法がありますか?

showInputDialog()戻り値文字列、偶数をStringとして読み取ります。

+0

こんにちは、応答ありがとう! :)あなたのコードはうまくいきました:Dしかし、もし私がちょうど名前と番号が欲しければ、どうすればその状態になれますか? – Layne

+1

+1、素敵な答え:-) –

+1

@Layne: 'JDialog'を使うべきで、' JTextField'を 'JTextField'に追加し、' JTextField'を 'DocumentListener'を追加してアルファベットと数字だけを許すようにしてください:-) Orそれ以外の場合は、 'name'文字列の各インデックスを調べてtrueを返し、それにフラグを立ててERRORを表示することで、任意の数値の' name'文字列を確認してください。 –

2

ではなく

String name = null; 

String name = ""; 

を宣言しようとしてから文字列名がループ状態にあるとIF条件で空であるかどうかを確認します。

方法showInputDialogは、文字列を返し、文字列を比較するための正しい方法はobjectString.equals(anotherObjectString)を使用しているため、あなたは文字列を比較しています

if (name.equals("")) 

から返さ

while (name.equals("")) 

... showInputDialogはnullを返します。常にfalseを返します。

+0

oh、ok。ありがとう! :) – Layne

+2

実際には、 'showInputDialog(...)'で 'Cancel'をクリックすると、nullの' String'が返されます。したがってnullは条件内でテストする必要がありますが、 ""(EMPTY String)のテストでは+1します:-) –

+0

あなたはそうです、忘れました! – Giovani

関連する問題