Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javafx中调用阶段的默认关闭操作?_Java_Javafx_Exit - Fatal编程技术网

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

如何在javafx中调用阶段的默认关闭操作?,java,javafx,exit,Java,Javafx,Exit,我编写了primaryStage的defaultCloseOperation函数,但我也有一个退出按钮,我想运行defaultCloseOperation。 我试图调用stage的close()和hide()方法,但它在没有调用defaultCloseOperation函数的情况下立即退出,但我需要调用它,因为我需要在关闭客户端时释放服务器端的所有资源。不要在stage的关闭操作中执行此操作 这就是该方法的用途 @Override public void stop() throws Except

我编写了primaryStage的defaultCloseOperation函数,但我也有一个退出按钮,我想运行defaultCloseOperation。
我试图调用stage的close()和hide()方法,但它在没有调用defaultCloseOperation函数的情况下立即退出,但我需要调用它,因为我需要在关闭客户端时释放服务器端的所有资源。

不要在
stage的关闭操作中执行此操作

这就是该方法的用途

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

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

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

请勿在
阶段的关闭操作中执行此操作

这就是该方法的用途

@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");
    }
});
stage.setOnCloseRequest(新的EventHandler(){
@重写公共无效句柄(WindowEvent t){
系统输出打印项次(“关闭”);
}
});
在这里:

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();
  }
}
neweventhandler

您可以看到它:

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override public void handle(WindowEvent t) {
        System.out.println("CLOSING");
    }
});
stage.setOnCloseRequest(新的EventHandler(){
@重写公共无效句柄(WindowEvent t){
系统输出打印项次(“关闭”);
}
});
在这里:

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();
  }
}

neweventhandler

您能再解释一下这应该做什么吗?调用
stage.close()
将不会调用
onCloseRequest()
处理程序。不清楚你是否打算这样做。如果希望事件处理程序无论窗口如何关闭都能被调用,那么应该使用
stage.setOnHidden()
。您能再解释一下这应该做什么吗?调用
stage.close()
将不会调用
onCloseRequest()
处理程序。不清楚你是否打算这样做。如果希望无论窗口如何关闭都能调用事件处理程序,则应使用
stage.setOnHidden()