我正在从csv文件中读取用户名的格式admin1, apple, adminstaff1, orange, staffstaff1 在新行上,无论我有多少行,在登录时只会检查最后一行。 AtomicBoolean found = new AtomicBoolean(false); btnLogin.setOnAction(e -> { while (in.hasNextLine()) { String s = in.nextLine().replaceAll("\\s+", ""); if (name.equals(sArray[0]) && password.equals(sArray[1])) { lMessage.setText("correct"); openMainForm(); } else if (name.equals("") || password.equals("")) { lMessage.setText("Please enter a username and password"); } else { lMessage.setText("Please enter valid credentials"); } } });我希望如果在文件中找到用户名和密码组合,他们将能够登录,而不仅仅是如果用户名和密码是时间中的最后一个
1 回答

凤凰求蛊
TA贡献1825条经验 获得超4个赞
问题是您正在循环中设置操作。也就是说,为每对创建一个操作对象,然后进行分配。因此,在上次迭代之后,操作将设置为最新的对象,这显然是检查最后一对用户名 - 密码。
循环翻译为类似的东西,
setOnAction(检查管理员 1、apple、admin 的操作对象 1)
设置操作(检查员工1、橙色、员工的操作对象2)
这有效地保留了上次创建的对象,并仅检查最后一对
您可能希望修改逻辑,以便只有一个操作对象。然后检查有效的用户名-密码对。
像这样:
btnLogin.setOnAction(e -> {
while (in.hasNextLine() ) {
// check condition here
// don't forget to break when successful
}
in.close();
});
另外,请确保在找到成功对后断开循环。否则同样的事情也会发生。
添加回答
举报
0/150
提交
取消