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;
}
}
});
Sie erhalten möglicherweise eine Antwort, wenn Sie eine [SSCCE] (http://pscode.org/sscce.html) angeben. Wir wissen nicht einmal, was 'cn' ist. – Howard
@Howard cn ist nur ein Klassenname. Die drei Abschnitte sind 3 verschiedene Klassen. – SpicyWeenie
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. –