2017-05-26 70 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()'。 –

相關問題