如何在 javafx 中调用阶段的默认关闭操作



我编写了primaryStage的defaultCloseOperation函数,但是我也有一个退出按钮,我想运行defaultCloseOperation。我尝试调用阶段的 close(( 和 hide(( 方法,但它立即退出而不调用我的 defaultCloseOperation 函数,但我需要调用它,因为我需要在关闭客户端时从服务器端释放所有资源。

不要在Stage的关闭操作上执行此操作。

这就是Application.stop方法应该用于的用途。

@Override
public void stop() throws Exception {
    // TODO: release resources here
}

但是,如果有资源用于多个窗口之一,则应为onHidden事件使用事件处理程序 - 无需扩展Stage

stage.setOnHidden(event -> {
    // TODO: release resources here
});

你可以看到它:

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override public void handle(WindowEvent t) {
        System.out.println("CLOSING");
    }
});

在这里:

new EventHandler<ActionEvent>() {
  @Override public void handle(ActionEvent actionEvent) {
    // take some action
    ...
    // close the dialog.
    Node  source = (Node)  actionEvent.getSource(); 
    Stage stage  = (Stage) source.getScene().getWindow();
    stage.close();
  }
}

您可以在此处阅读更多解释

最新更新