JavaFX: stage.setOnCloseRequest() 不工作

JavaFX: stage.setOnCloseRequest() not working

我有一个主要的 window,其上会打开一个错误对话框。此时,主 window 和错误对话框(主 window 阶段的一部分)之间会显示一个叠加层。
mainWindowOverlay.setManaged(true) 当错误对话框关闭时,叠加层应该消失。
errorStage.setOnCloseRequest(we -> overlayOff()) 我不知道关闭事件是否未注册,或者是否存在其他问题,但在错误对话框关闭后覆盖仍然存在。

有什么想法吗?

controllerMainWindow.java

package packageA;
import [...];

public class controllerMainWindow extends AbstractController
{
    @FXML
    private AnchorPane mainWindowOverlay;
    @FXML
    private Button btnError;
    //---------------------------------------------------------------------------------------------------
    public void initialize()
    {
        mainWindowOverlay.setManaged(false);
    }
    //---------------------------------------------------------------------------------------------------
    @FXML
    public void handleButtonAction(ActionEvent event)
    {
            try {
                if (event.getSource().equals(btnError)) {
                    FXMLLoader errorLoader = new FXMLLoader();
                    errorLoader.setLocation(getClass().getResource("errorDialog.fxml"));
                    controllerErrorDialog errorController = new controllerErrorDialog();
                    errorLoader.setController(errorController);
                    Parent layout;
                    layout = errorLoader.load();
                    Scene errorScene = new Scene(layout);
                    Stage errorStage = new Stage();
                    errorStage.initStyle(StageStyle.UNDECORATED);
                    errorController.setStage(errorStage);
                    if(this.main!=null) {
                        errorStage.initOwner(main.getPrimaryStage());
                    }
                    customerServiceOverlay.setManaged(true);
                    errorStage.initModality(Modality.APPLICATION_MODAL);
                    errorStage.setScene(errorScene);
                    errorStage.setX(750);
                    errorStage.setY(425);
                    errorStage.setOnCloseRequest(we -> overlayOff());
                    errorStage.showAndWait();
                }
            } catch (IOException exceptionHandleButtonAction) {
                System.out.println("Error on handleButtonAction.");
                exceptionHandleButtonAction.printStackTrace();
                return;
            }
    }
    //---------------------------------------------------------------------------------------------------
    public void overlayOff()
    {
        customerServiceOverlay.setManaged(false);
    }
    //---------------------------------------------------------------------------------------------------
}

controllerErrorDialog.java

package packageA;
import [...];

public class controllerErrorDialog extends AbstractController implements Initializable {
    @FXML
    private Button btnClose;
    @FXML
    private Stage stage = null;
    //---------------------------------------------------------------------------------------------------
    @Override
    public void initialize(URL url, ResourceBundle rb)
    {

    }
    //---------------------------------------------------------------------------------------------------
    public void setStage(Stage stage)
    {
        this.stage = stage;
    }
    //---------------------------------------------------------------------------------------------------
    @FXML
    public void handleButtonAction(ActionEvent event)
    {
        stage.fireEvent(new javafx.stage.WindowEvent(stage, 
        javafx.stage.WindowEvent.WINDOW_CLOSE_REQUEST));
        stage.close();
    }
    //---------------------------------------------------------------------------------------------------
}

@James_D和@anko提供的解决方案。