2017-05-26 36 views
0

我写了primaryStage的defaultCloseOperation函数,但我也有一个退出按钮,我想运行该defaultCloseOperation。 我试图调用阶段的close()和hide()方法,但它立即退出而不调用我的defaultCloseOperation函数,但我需要调用它,因为我需要从服务器端释放所有资源,当我关闭客户。如何在javafx中调用阶段的默认关闭操作?

回答

2

请勿在Stage的关闭操作中执行此操作。

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

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

如果有用于然而,多个窗口的一个资源,你应该使用一个事件处理程序onHidden事件 - 无需扩展Stage

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

你可以看到它:

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

更多的解释,你可以阅读here

+1

你能解释更多的东西,这是应该做的?调用'stage.close()'将**不会调用'onCloseRequest()'处理程序。目前还不清楚这是你打算的。如果你想要一个事件处理程序,无论窗口如何关闭,你都应该使用'stage.setOnHidden()'。 –

相关问题