变量为 null 但它真的不是吗?

Variable is null but it really isn't?

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

在控制器中 class 我有我的 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();
    }
}

以及在按下 "install" 按钮后启动的方法:

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

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

只需将方法 return 设为布尔值:

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