2017-05-26 4 views
0

J'ai écrit la fonction defaultCloseOperation de primaryStage, mais j'ai aussi un bouton de sortie et je veux exécuter ce defaultCloseOperation. J'ai essayé d'appeler les méthodes close() et hide() de la scène mais elle quitte immédiatement sans appeler ma fonction defaultCloseOperation, mais je dois l'appeler car j'ai besoin de libérer toutes les ressources du côté serveur quand je ferme client.Comment appeler l'opération de fermeture par défaut d'une scène dans javafx?

Répondre

2

Ne pas le faire lors d'une opération de fermeture d'un Stage.

C'est à quoi devrait servir la méthode Application.stop.

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

Si les ressources sont utilisées pour l'une des multiples fenêtres cependant, vous devez utiliser un gestionnaire d'événements pour l'événement onHidden - pas besoin d'étendre Stage:

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

vous pouvez le voir :

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

et ici:

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

plus d'explication, vous pouvez lire here

+1

Pouvez-vous expliquer un peu plus ce que cela est censé faire? L'appel 'stage.close()' ne ** appellera pas ** le gestionnaire 'onCloseRequest()'. Ce n'est pas clair si c'est ce que vous avez l'intention de faire. Si vous voulez un gestionnaire d'événements invoqué, peu importe comment la fenêtre est fermée, vous devez utiliser 'stage.setOnHidden()'. –