麻烦简单的密码程序 - Java

0 java

我有一天晚上做了一些编程,遇到了问题.看来我的按钮的动作监听器中的if语句没有被拾取.我对编程很陌生,所以我希望它不是太明显任何建议?这是代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.util.*;
import javax.swing.*;

public class Login extends JFrame implements ActionListener {
JTextField tfUsername, tfPassword;
JLabel jlUser, jlPass;
JTextArea tarea;
JButton bLogin;

public Login(){
    JFrame frame = new JFrame("Login Test");
    JPanel panel = new JPanel();
    jlUser = new JLabel("Username");
    tfUsername = new JTextField(20);
    jlPass = new JLabel("Password");
    tfPassword = new JTextField(20);
    bLogin = new JButton("Login");
    tarea = new JTextArea();

    frame.setSize(335,150);
    frame.add(panel);
    panel.add(jlUser);
    panel.add(tfUsername);
    panel.add(jlPass);
    panel.add(tfPassword);
    panel.add(bLogin);
    panel.add(tarea);
    bLogin.addActionListener(this);
    frame.setResizable(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}


public static void main(String[] args) {
new Login();

}


@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if(e.getSource() == bLogin){
        String user = tfUsername.getText();
        String pass = tfPassword.getText();
        String be = "hi";

                    if(pass == be){
            tarea.setText("Successful");
        }
}

}
Run Code Online (Sandbox Code Playgroud)

Mad*_*mer 6

问题在于你如何比较passbe Strings

if (pass == be) {
    tarea.setText("Successful");
}
Run Code Online (Sandbox Code Playgroud)

这是比较对象引用,而不是它们的内容,它们总是错误的......相反,你应该使用它 .equals

if (pass.equals(be)) {
    tarea.setText("Successful");
}
Run Code Online (Sandbox Code Playgroud)

这将进行区分大小写的比较.如果需要,您也可以.equalsIgnoreCase在案例无关紧要的地方使用

对于密码,您应该使用JPasswordField密码并将其存储在char数组中,因为String值更容易从内存中挑选出来.

那么这将需要您使用Arrays.equals(char\[\], char\[\]),而不是

有关详细信息,请参见如何使用密码字段 ...