我正在研究Java上的登录系统程序。
每当我记下用户和密码并按下登录时,它总是会转到else语句。我确实把passwordfield
变成了一个字符串,但它仍然不起作用。
以下是代码:
public static void main(String[] args)
{
JFrame frame = new JFrame("Login");
frame.setLayout(new BorderLayout());
frame.add(panelC(), BorderLayout.CENTER);
frame.add(panelN(), BorderLayout.NORTH);
//frame.add(panelW(), BorderLayout.WEST);
//frame.add(panelE(), BorderLayout.EAST);
frame.add(panelS(), BorderLayout.SOUTH);
frame.setVisible(true);
frame.pack();
}
public static JPanel panelC()
{
JPanel panel = new JPanel();
label1 = new JLabel("Username");
label2 = new JLabel("Password");
field1 = new JTextField(10);
pass = new JPasswordField(10);
panel.add(label1);
panel.add(field1);
panel.add(label2);
panel.add(pass);
return panel;
}
public static JPanel panelN()
{
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(0,25));
return panel;
}
public static JPanel panelS()
{
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0,5));
button1 = new JButton("Login");
JLabel test = new JLabel();
JLabel test2 = new JLabel();
JLabel test3 = new JLabel();
JLabel test4 = new JLabel();
panel.add(test);
panel.add(test2);
panel.add(test3);
panel.add(test4);
panel.add(button1);
char[] p = pass.getPassword();
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent f)
{
try
{
Scanner scan = new Scanner (new File("Logins.txt"));
String user = scan.nextLine();
String pass = scan.nextLine();
String inPass = new String(p);
String inUser = field1.getText();
while (scan.hasNextLine())
{
if (inUser.equals(user) && inPass.equals(pass))
{
System.out.println("Granted");
break;
}
else
{
user = scan.nextLine();
pass = scan.nextLine();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
return panel;
}
}
答案 0 :(得分:2)
您在创建组件的代码中调用getText()
,因此在用户有可能在文本字段中输入任何内容之前调用此代码。相反,只能从适当的侦听器中调用此方法,例如由用户按下accept JButton或在JTextField中按Enter键触发的ActionListener。
解决方案:在ActionListener中填充inPass和inUser字符串,而不是在创建代码中填充。
其他问题: