麻烦简单的密码程序 - Java

时间:2013-09-26 00:37:40

标签: 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");
        }
}

}

2 个答案:

答案 0 :(得分:6)

问题在于您如何比较passbe String

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

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

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

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

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

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

有关详细信息,请参阅How to use Password Fields ...

答案 1 :(得分:1)

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

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

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

传递的gettext也不是很安全