Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX |用户名和密码检查无法正常工作_Java_Events_Javafx_Fxml - Fatal编程技术网

JavaFX |用户名和密码检查无法正常工作

JavaFX |用户名和密码检查无法正常工作,java,events,javafx,fxml,Java,Events,Javafx,Fxml,我正在玩JavaFX并创建了一个登录表单。所以我想测试不可避免的,插入usernmae和密码来检查是否正确。问题是它没有按预期运行。无论发生什么,它都会进入另一个身体。代码如下: public class Controller { @FXML PasswordField pass; @FXML TextField name; @FXML javafx.scene.control.Button login; @FXML Hyperlink signup; @

我正在玩JavaFX并创建了一个登录表单。所以我想测试不可避免的,插入usernmae和密码来检查是否正确。问题是它没有按预期运行。无论发生什么,它都会进入另一个身体。代码如下:

public class Controller {
    @FXML PasswordField pass;
    @FXML TextField name;
    @FXML javafx.scene.control.Button login;
    @FXML Hyperlink signup;
    @FXML Label errormessage;

    @FXML private void buttonPressed() {
        checkUser();
    }

    @FXML private void ifEnterIsPressed(KeyEvent k) {
        if (k.getCode() == KeyCode.ENTER)
            checkUser();
    }

    @FXML private void checkUser() {
        System.out.println(name.getCharacters());
        System.out.println(pass.getCharacters());
        if (name.getCharacters().equals("Marios") && pass.getCharacters().equals("19981998")) {
            errormessage.setVisible(false);
            System.out.println("Access granted!");
        }
        else {
            errormessage.setText("Wrong username or password");
            System.out.println("Access denied");
        }
    }
}
我不知道我是否遗漏了一些明显的东西或者什么


提前谢谢

问题在于如何使用
TextField.getCharacters()
方法。这与调用
TextField.getText()
不同。目前,对于Java 10,方法
TextField.getCharacters()
返回
StringBuilder
(它是
CharSequence
)而不是
String
。这是可以预料的,因为Javadoc声明:

返回支持文本字段内容的字符序列

“内容”很可能意味着
TextField
的支持和源代码似乎证实了这一点。但是,您要比较的是
TextField
textProperty()
中包含的
字符串

显然,我不知道这一点(虽然可以理解),一个
StringBuilder
并不等于一个
String
,即使它们包含相同的字符。或者,用代码表示:

StringBuilder sb = new StringBuilder("Hello, World!");
String s = "Hello, World!";
sb.equals(s); // FALSE
sb.toString().equals(s); // TRUE

因此,要直接回答,请分别将
name.getCharacters()
pass.getCharacters()
更改为
name.getText()
pass.getText()

问题在于您对
TextField.getCharacters()
方法的使用。这与调用
TextField.getText()
不同。目前,对于Java 10,方法
TextField.getCharacters()
返回
StringBuilder
(它是
CharSequence
)而不是
String
。这是可以预料的,因为Javadoc声明:

返回支持文本字段内容的字符序列

“内容”很可能意味着
TextField
的支持和源代码似乎证实了这一点。但是,您要比较的是
TextField
textProperty()
中包含的
字符串

显然,我不知道这一点(虽然可以理解),一个
StringBuilder
并不等于一个
String
,即使它们包含相同的字符。或者,用代码表示:

StringBuilder sb = new StringBuilder("Hello, World!");
String s = "Hello, World!";
sb.equals(s); // FALSE
sb.toString().equals(s); // TRUE

因此,要直接回答,请分别将
name.getCharacters()
pass.getCharacters()
更改为
name.getText()
pass.getText()

使用getText(),而不是getCharacters()使用getText(),而不是getCharacters()。谢谢您的解释。谢谢您的解释。