【发布时间】:2020-05-17 16:31:09
【问题描述】:
我正在尝试在 JavaFX 中创建一个登录系统,我需要检查与电子邮件对应的 textArea 的字符串是否与我的 User 类中的电子邮件变量相同。但是,我用于将 textArea 中的字符串与用户详细信息进行比较的方法将始终返回 false。我不确定为什么。我试过 .equals()、.compareTo 甚至 .charAt() 并用 1 个字母对其进行了测试,它仍然会返回 false。
这是我的方法代码。请注意,这是我用于将 textArea 中的字符串与 User.getEmail 中的字符串进行比较的方法。
public boolean checkCredentials()
{
return text1.getText().equals(user.getEmail());
}
这是我的 User 类中方法 .getEmail() 的代码:
private String email = "1";
public String getEmail()
{
return email;
}
此外,即使 textArea 中的输入为“1”,我的用户类中的字符串 Email 为“1”,我仍然得到返回 false:
public boolean checkCredentials()
{
return text1.getText().length() == user.getEmail().length();
}
我的猜测是,textArea 中的字符串在某处比 User 类中的字符串具有“额外”的内容。我试过打印出两个字符串的长度,我得到了相同的答案。
重新创建所需的最少代码,注意必须安装 JavaFX,并且必须使用 JavaFX 应用程序模板:
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application
{
Stage window;
Scene scene1;
String sEmail;
// TextBoxes Dec.
TextArea text1 = new TextArea();
public static void main(String[] args)
{
launch(args);
}
public boolean checkCredentials()
{
return text1.getText().equals(sEmail);
}
@Override
public void start(Stage primaryStage)
{
window = primaryStage;
sEmail = "1";
// TextBoxes Ini.
text1.setMaxWidth(200);
text1.setMaxHeight(25);
text1.setMinHeight(25);
// Button
Button button1 = new Button("Check string");
if(checkCredentials())
{
button1.setOnAction(e -> System.out.println("The email is correct"));
}
else
{
button1.setOnAction(e -> System.out.println("The email is NOT correct"));
}
// Layout1
VBox layout1 = new VBox(20);
layout1.setAlignment(Pos.CENTER);
layout1.getChildren().add(text1, button1);
scene1 = new Scene(layout1, 750, 500);
window.setScene(scene1);
window.setTitle("Hello");
window.show();
}
}
【问题讨论】:
-
在返回布尔值之前,尝试打印每个 text1 和用户的内容和长度。
-
根据您提供的信息无法确定问题所在。您似乎使用了错误的输入进行读取,但我们无法确定。但是,您可以简单地设置断点并对其进行调试。然而,我们需要一个minimal reproducible example
-
我已经尝试打印 text1 和 user.getEmail 的输出,但它们打印的 sxact 相同。例如我做了: button1.setOnAction(e -> System.out.println(text1.getText + "\n" + user.getEmail)) 它会打印: 1 1
-
在实例化的时候,textArea 的文本是空的——那个时候,检查总是假的。现在,您根据该检查将 不同 actionHandler 注册到按钮。您(很可能)想要做的是检查 inside 的凭据 - 一个 single,无条件注册 - 按钮的 onAction 处理程序
-
谢谢,现在我看到了问题。检查将始终返回 false,因为检查是在开始时完成的,此时 textArea 中没有任何内容。