Как исправить пустую переменную

Я создаю хранилище паролей для школьного проекта и пытаюсь сравнить "masterPassword" с "enterPassword", но всякий раз, когда я проверяю "enterPassword", он возвращается как нулевая переменная. Как мне это исправить?

Я попытался закомментировать код actionListener и заставить его просто showConfirmDialog (null, enterPassword), и он возвращает пустой.

import java.awt.*;
import java.awt.event.*;

public class PasswordVault implements ActionListener
{
    static String masterPassword;
    static String enteredPassword;

    public static void  main(String[] args) 
    {   
        String name = JOptionPane.showInputDialog("What is your name?");
        masterPassword = JOptionPane.showInputDialog("Hello, " + name + ". " + "What would you like your master password to be?");

        new PasswordVault();
    }

    public PasswordVault()
    {
        JFrame masterPasswordFrame = new JFrame("Master Password");
        masterPasswordFrame.setSize(400,100);
        masterPasswordFrame.setLocation(500,300);
        masterPasswordFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel mainPanel = new JPanel();

        JPasswordField masterPasswordField = new JPasswordField(10);
        masterPasswordField.setEchoChar('*');
        JLabel passwordLabel = new JLabel("Enter Password: ");
        JButton okayButton = new JButton("Check");
        okayButton.addActionListener(this);

        mainPanel.add(passwordLabel);
        mainPanel.add(masterPasswordField);
        mainPanel.add(okayButton);

        masterPasswordFrame.add(mainPanel);
        masterPasswordFrame.setVisible(true);
        masterPasswordFrame.pack();

        enteredPassword = new String(masterPasswordField.getPassword());    
    }

    public void actionPerformed(ActionEvent event)
    {
        if(enteredPassword.equals(masterPassword))
        {
            JOptionPane.showConfirmDialog(null, "Correct");
            //close the masterPasswordFrame and take the user to the Password Vault
        }
        else
        {
            JOptionPane.showConfirmDialog(null, "Password Incorrect. Please Try Again.");
        }
    }
}

Я хочу, чтобы код выводил, соответствует ли введенный пароль мастер-паролю, но вместо этого он ничего не выводит.

2 ответа

Это происходит из-за этой строки в конструкторе:

enteredPassword = new String(masterPasswordField.getPassword());

Вы берете значение, когда оно только что создано, поэтому значение будет пустым.

Ты должен взять private JPasswordField masterPasswordField; на уровне класса, а затем получить значение при нажатии кнопки:-

public void actionPerformed(ActionEvent event)
{
    if(new String(masterPasswordField.getPassword()).equals(masterPassword))
    {
.
. 

И вы можете избавиться от enteredPassword переменная.

Вам нужно позвонить getPassword() в actionPerformed() метод.

 public void actionPerformed(ActionEvent event)
    {
        enteredPassword = new String(masterPasswordField.getPassword());
        if(enteredPassword.equals(masterPassword))
        {
            JOptionPane.showConfirmDialog(null, "Correct");
            //close the masterPasswordFrame and take the user to the Password Vault
        }
        else
        {
            JOptionPane.showConfirmDialog(null, "Password Incorrect. Please Try Again.");
        }
    }
Другие вопросы по тегам