java / swing- Почему мой метод возврата вернулся к NULL после присвоения значения? - PullRequest
0 голосов
/ 25 марта 2012

Я создал диалоговое окно входа пользователя, которое сравнивает имя пользователя и пароль, которые они сохранили в файле csv, с тем, что они ввели в соответствующие текстовые поля. До появления имени входа я использовал JOptionPanes для отображения операторов возврата, в которые я передал пароль имени пользователя. Панель JOptionPane отображает имя и пароль. Но после того, как я войду в систему, введите имя и пароль для сравнения, авторизация не удалась. Когда я использовал JOptionPane для отображения того же имени пользователя и пароля снова, он говорит, что оба являются нулевыми. Я сузил проблему, где я настроил отдельный логический метод, который я использую, чтобы увидеть, равно ли то, что вводит пользователь, значению возвращаемого метода, но по какой-то причине мои методы возврата возвращаются к 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;
            }
        }   
    });

1 Ответ

2 голосов
/ 25 марта 2012

Учитывая, что следующее прекрасно работает

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

}

Вы не предоставили достаточно информации, нам нужен установленный код, обновите код, потому что он почти наверняка есть проблема (например, вы считаете, что это экземпляр или он был перезаписан)

в нынешнем виде я не могу помочь, пока вы не приведете более короткий пример.

...