2012-03-25 2 views
0

Ich habe ein Benutzeranmelde-Dialogfeld erstellt, das den Benutzernamen und das Kennwort, die in einer CSV-Datei gespeichert sind, mit dem vergleicht, was sie in die entsprechenden Textfelder eingegeben haben. Bevor die Anmeldung angezeigt wird, habe ich JOptionPanes verwendet, um die Rücksendeanweisungen anzuzeigen, an die ich das Benutzername-Kennwort übergeben habe. Das JOptionPane zeigt den Namen und das Passwort an. Aber nachdem ich mich angemeldet habe, dann geben Sie den Namen und das Passwort ein, mit dem zu vergleichen ist, die Anmeldung ist nicht erfolgreich. Als ich mit dem JOptionPane denselben Benutzernamen und dasselbe Passwort erneut anzeigte, hieß es, beide seien null. Ich habe das Problem eingegrenzt, wo ich eine separate boolesche Methode eingerichtet habe, die ich verwende, um zu sehen, ob der eingegebene Wert gleich dem Wert der Rückgabemethode ist, aber aus irgendeinem Grund kehren meine Rückgabemethoden vor dem Vergleich zu NULL zurück.Java/Swing- Warum ist meine Rückkehrmethode nach dem Zuweisen eines Werts auf NULL zurückgekehrt?

Irgendwelche Vorschläge, warum dies geschieht? Wieder, aus irgendeinem Grund, Ich verliere die Rückgabewerte von "getName()" und "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

Sie erhalten möglicherweise eine Antwort, wenn Sie eine [SSCCE] (http://pscode.org/sscce.html) angeben. Wir wissen nicht einmal, was 'cn' ist. – Howard

+0

@Howard cn ist nur ein Klassenname. Die drei Abschnitte sind 3 verschiedene Klassen. – SpicyWeenie

+1

Howard ist richtig, brauche mehr Code cn ist ein Geheimnis, ich sollte klarstellen, es wäre auch gut, wenn wir sehen könnten, wo setName und setPassword aufgerufen werden. –

Antwort

2

Da der folgende

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; 
    } 

} 

Sie nicht genügend Informationen, funktioniert gut zur Verfügung gestellt haben, müssen wir die Menge Code, Code-Update, weil es fast auf jeden Fall ist die Frage (cn die Instanz Sie denken, es ist zum Beispiel oder wurde es überschrieben)

wie es steht kann ich nicht weiter helfen, bis Sie ein kürzeres Beispiel bieten.

Verwandte Themen