2017-05-26 4 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()'を使用する必要があります。 –

関連する問題