2

ユーザー名とパスワードが同じにならないようにユーザー登録を制限しているSwingGUIがあります。私はJoptionPane次のコードでタスクに使用しています:

public void actionPerformed(ActionEvent e) {
String username = tuser.getText();
String password1 = pass1.getText();
String password2 = pass2.getText();
String workclass = wclass.getText();
Connection conn = null;

try {
    if(username.equalsIgnoreCase(password1)) {
       JOptionPane.showMessageDialog(null,
           "Username and Password Cannot be the same. Click OK to Continue",
           "Error", JOptionPane.ERROR_MESSAGE); 
       System.exit(0);
    }
...

問題は、私が使用しなければならなかったことSystem.exit(0)です; それがなければ、次のコードが実行されていました。JOptionPaneポップアップ後も登録は成功していました。システムを終了する必要はありませんが、検証後もユーザーを登録ページに表示しておく必要があります。これを行うための最良の方法は何ですか?を使用するのではなく、これを行う他の便利な方法はありJOptionPaneますか?

4

4 に答える 4

3

交換

System.exit(0);

return;

メソッドの残りの部分を実行したくない場合

于 2012-07-31T09:12:49.840 に答える
3

コードを無限のループ内に配置し、成功した場合はコードを中断する必要があります。何かのようなもの:

while(true)
{
    // get input from user

    if(vlaidInput) break;
}
于 2012-07-31T09:13:59.093 に答える
3

その次のコードを他の部分に配置すると、うまくいく可能性があります

if(username.equalsIgnoreCase(password1))
{
   JOptionPane.showMessageDialog(null, "Username and Password Cannot be the   same. Click OK to Continue","Error",JOptionPane.ERROR_MESSAGE); 

}
else 
{
  //place that next code
  // username and password not equals, then it will execute the code
}
于 2012-07-31T09:26:29.083 に答える
2

まず、UIとビジネスロジック(この場合は検証)を分離するのが最適です。それらを別々に、それ自体で相互作用を処理するためのより良い方法を提案してもらいます。UserValidationしたがって、メソッドを使用して別のクラスを作成することは理にかなっていますboolean isValid()。このようなもの:

public class UserValidation {
    private final String name;
    private final String passwd;
    private final String passwdRpt;

    public UserValidation(final String name, final String passwd, final String passwdRpt) {
        this.name = name;
        this.passwd = passwd;
        this.passwdRpt = passwdRpt;
    }

    public boolean isValid() {
       // do your validation logic and return true if successful, or false otherwise
    }
}

その場合、アクションコードは次のようになります。

public void actionPerformed(ActionEvent e) {
        if (new UserValidation(tuser.getText(), pass1.getText(), pass2.getText()).isValid()) {
           // do everything needed is validation passes, which should include closing of the frame of dialog used for entering credentials.
        }

        // else update the UI with appropriate error message -- the dialog would not close by itself and would keep prompting user for a valid entry
}

提案されたアプローチは、検証ロジックを簡単に単体テストし、さまざまな状況で使用する方法を提供します。isValid()メソッドのロジックがより重い場合は、によって実行する必要があることにも注意してくださいSwingWorker。の呼び出しはSwingWorker、アクション(つまり、UI)ロジックの責任です。

于 2012-07-31T09:57:52.373 に答える