2012-03-25 11 views
0

私はcsvファイルに保存されているユーザーの名前とパスワードを、対応するテキストフィールドで入力したものと比較するユーザーログインダイアログボックスを作成しました。ログインが表示される前に、JOptionPanesを使用して、ユーザー名のパスワードを渡したreturn文を表示しています。 JOptionPaneには、名前とパスワードが表示されます。しかし、私はログインが表示された後、名前とパスワードを比較するには、ログインが成功していないを入力します。 JOptionPaneを使用して同じユーザー名とパスワードを再度表示すると、両方ともnullと表示されます。私は、ユーザーが入力したものがreturnメソッドの値と等しいかどうかを確認するために使用する別個のブール値メソッドをセットアップした問題を絞り込んだが、何らかの理由で、返すメソッドが比較前にNULLに戻る。java/swing-値を割り当てた後、返却メソッドがNULLに戻るのはなぜですか?

これはなぜ起こっているのですか?繰り返しますが、何らかの理由で"getName()""getPass()"が返されます。

/**Read csv data. put data into array, then elements into variables */ 
    String lines = ""; 
    String unparsedFile = ""; 

    FileReader fr = new FileReader("c:\\foo\\user.dat"); 
    BufferedReader br = new BufferedReader(fr); 

    while((lines = br.readLine()) != null){ 
     unparsedFile += lines; 
    } 

    br.close(); 
    userData = unparsedFile.split(","); 
    String g = userData[0]; 

    g1 = userData[0]; // return in String method "getName()" 
    this.name = g1; 

    h1 = userData[1]; // returned in String method "getPass()" 
    this.password = h1; 
/////////////////////////////// 
/* check if what you entered is same as getName() and getPass() */ 
public static boolean authenticate(String username, String password){ 

    String g2, h2; 
    g2 = cn.getName(); 
    h2 = cn.getPass(); 
    JOptionPane.showInputDialog(null, cn.getName() + " login " + cn.getPass()); 
    if(username.equals(g2) && password.equals(h2)){ 
     JOptionPane.showInputDialog(null, "True"); 
     return true; 
    } 
    JOptionPane.showInputDialog(null, cn.getName() + " login false " + cn.getPass()); 
    return false; 
} 
//////////////////////// 
/* Login: enter name and password, the check if it matches getName() and getPass() */ 
nam = tfUsername.getText(); 
     passA = pfPassword.getText(); 

      if(Login.authenticate(nam, passA)){ 
       JOptionPane.showMessageDialog(UserLogin.this, 
         "Welcome, " + cn.getChatName() + ". Login successful.", 
         "Login", 
         JOptionPane.INFORMATION_MESSAGE); 
         succeeded = true; 
         dispose(); 
      } 
      if(!nam.equals(cn.getName()) && !passA.equals(cn.getPass())){ 
       JOptionPane.showMessageDialog(UserLogin.this, "Invalid username or password", 
         "Login unsuccessful", JOptionPane.ERROR_MESSAGE); 
       //reset username and password 
       tfUsername.setText(""); 
       pfPassword.setText(""); 
       succeeded = false; 
      } 
     } 
    }); 
+3

[SSCCE](http://pscode.org/sscce.html)を入力した場合、回答が得られるかもしれません。我々は 'cn'が何であるかを知りません。 – Howard

+0

@Howard cnは単なるクラス名です。 3つのセクションは3つの異なるクラスです。 – SpicyWeenie

+1

ハワードはより多くのコードを必要としています.cnはミステリーなので、setNameとsetPasswordがどこで呼び出されているか分かります。 –

答えて

2

次は正常に動作していることを考えるとあなたが十分な情報を提供していない

public class PasswordData { 
    private String _password; 
    private String _username; 

    public PasswordData(String password, String username) 
    { 
     _password = password; 
     _username = username; 
    } 

    public String getUsername() 
    { 
     return _username; 
    } 

    public void setUsername(String username) 
    { 
     _username = username; 
    } 

    public String getPassword() 
    { 
     return _password; 
    } 

    public void setPassword(String password) 
    { 
     _password = password; 
    } 
} 

public class StackOverflowPasswordExample { 
    private static PasswordData cn; 

    public static void main(String[] args) { 
     cn = new PasswordData("mypassword", "myusername"); 
     boolean auth = authenticate(); 
     System.out.println("authenticated is " + auth); 
    } 

    public static boolean authenticate() { 
     String g2 = cn.getPassword(); 
     String h2 = cn.getUsername(); 

     return g2 != null && h2 != null; 
    } 

} 

それは問題がある、ほぼ間違いなくありますので、我々は(セットコード、更新コードを必要とするインスタンスCNでありますたとえば、それが上書きされたと思います)

これは、私があなたに短い例を提供するまで、さらに助けになることはできません。

関連する問題