变量为空,但实际上不是吗?

时间:2019-02-14 13:53:16

标签: java javafx alert

我正在使用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()方法?

1 个答案:

答案 0 :(得分:6)

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

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()) {