【问题标题】:How to fix an empty variable如何修复空变量
【发布时间】:2019-01-16 00:49:19
【问题描述】:

我正在为一个学校项目制作密码保险库,我正在尝试将“masterPassword”与“enteredPassword”进行比较,但每当我测试“enteredPassword”时,它都会作为空变量返回。我该如何解决?

我尝试注释掉代码 actionListener 并让它简单地 showConfirmDialog(null,enteredPassword) 并返回空白。

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.");
        }
    }
}

我希望代码输出输入的密码是否与主密码匹配,但它不输出任何内容。

【问题讨论】:

    标签: java passwords passwordvault


    【解决方案1】:

    这是因为构造函数中的这一行:-

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

    您正在获取刚刚创建的值,因此该值将为空。

    你应该在类级别取private JPasswordField masterPasswordField;,然后在单击按钮时获取值:-

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

    你可以摆脱enteredPassword变量。

    【讨论】:

      【解决方案2】:

      你需要在actionPerformed()方法中调用getPassword()

       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.");
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2014-07-30
        • 1970-01-01
        • 2020-05-08
        • 2020-09-13
        • 1970-01-01
        • 2013-05-04
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        相关资源
        最近更新 更多