我正在使用Java + JavaFX编写一个小型应用程序。

在控制器类中,我有PasswordField

@FXML
PasswordField password;


和一个用于临时存储密码的字段:

private String rootPassword;


然后,我有一种方法来处理密码:

private void handlePasswordField() {
    if (!password.getText().isEmpty()) {
        this.rootPassword = password.getText();
    } else {
        Alert alert = new Alert(AlertType.WARNING);
        alert.initOwner(nbtcInstaller.getPrimaryStage());
        alert.setTitle("No password");
        alert.setHeaderText("No password provided");
        alert.setContentText("Please enter a new ROOT password");
        alert.showAndWait();
    }
}


以及按下“安装”按钮后启动的方法:

@FXML
private void handleCommand() {
    handlePasswordField();
    doAllTheOtherStuff();
    Platform.exit();
}


当我不提供密码时,会收到警报,但是doAllTheOtherStuff()仍会启动。在没有提供密码的情况下如何防止它启动doAllTheOtherStuff()方法?

最佳答案

只需使该方法返回一个布尔值即可:

private boolean handlePasswordField() {
    if (!password.getText().isEmpty()) {
        this.rootPassword = password.getText();
        return true;
    } else {
        Alert alert = new Alert(AlertType.WARNING);
        alert.initOwner(nbtcInstaller.getPrimaryStage());
        alert.setTitle("No password");
        alert.setHeaderText("No password provided");
        alert.setContentText("Please enter a new ROOT password");
        alert.showAndWait();
        return false;
    }
}


然后在必要时进行检查:

@FXML
private void handleCommand() {
    if(handlePasswordField()) {
        doAllTheOtherStuff();
    }
    Platform.exit();
}


最后的建议是将方法的名称更改为更清晰,但这只是可选的:

private boolean isPasswordValid() {


那么if会更自然:

if(isPasswordValid()) {

关于java - 变量为空,但实际上不是吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54692047/

10-09 01:05