0

一天晚上我在做一些编程,但遇到了一个问题。似乎我的按钮的动作侦听器中的 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");
        }
}

}
4

2 回答 2

6

问题在于您如何比较passand be Strings

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

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

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

这将进行区分大小写的比较。如果需要,您也可以.equalsIgnoreCase在大小写无关的情况下使用

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

这将要求您改为Arrays.equals(char\[\], char\[\])使用

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

于 2013-09-26T00:41:05.620 回答
1

到目前为止,我可以看到字符串比较错误。发布错误日志以查看是否有任何其他错误。在字符串匹配中尝试

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

您也可以使用 compareto 函数来检查字符串

用于 pass 的 gettext 也不是很安全

于 2013-09-26T00:43:37.560 回答