88 votes

Comment fermer une application JavaFX à la fermeture de la fenêtre ?

Dans Swing, vous pouvez simplement utiliser setDefaultCloseOperation() pour fermer l'ensemble de l'application lorsque la fenêtre est fermée.

Cependant, je ne trouve pas d'équivalent dans JavaFX. J'ai plusieurs fenêtres ouvertes et je veux fermer l'application entière si une fenêtre est fermée. Quel est le moyen de faire cela en JavaFX ?

Edita:

Je comprends que je peux passer outre setOnCloseRequest() pour effectuer une opération sur la fermeture de la fenêtre. La question est de savoir quelle opération doit être effectuée pour mettre fin à l'ensemble de l'application.

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        stop();
    }
});

En stop() définie dans la méthode Application ne fait rien.

106voto

Teocali Points 472

L'application s'arrête automatiquement lorsque le dernier Stage est fermé. A ce moment, le stop() de votre Application est appelée, vous n'avez donc pas besoin d'un équivalent à setDefaultCloseOperation()

Si vous souhaitez arrêter l'application avant cela, vous pouvez appeler Platform.exit() par exemple dans votre onCloseRequest appel.

Vous pouvez obtenir toutes ces informations sur la page javadoc de Application : http://docs.oracle.com/javafx/2/api/javafx/application/Application.html

83voto

Cyrus13 Points 819

Certaines des réponses fournies n'ont pas fonctionné pour moi (javaw.exe toujours en cours d'exécution après la fermeture de la fenêtre) ou, eclipse a montré une exception après la fermeture de l'application.

D'un autre côté, cela fonctionne parfaitement :

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent t) {
        Platform.exit();
        System.exit(0);
    }
});

29voto

Pierre Henry Points 1940

À titre de référence, voici une mise en œuvre minimale utilisant Java 8 :

@Override
public void start(Stage mainStage) throws Exception {

    Scene scene = new Scene(new Region());
    mainStage.setWidth(640);
    mainStage.setHeight(480);
    mainStage.setScene(scene);

    //this makes all stages close and the app exit when the main stage is closed
    mainStage.setOnCloseRequest(e -> Platform.exit());

    //add real stuff to the scene...
    //open secondary stages... etc...
}

24voto

Om Prakash Points 404
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        Platform.exit();
        System.exit(0);
    }
});

3voto

Sumit Singh Points 8601

Avez-vous essayé ceci setOnCloseRequest

setOnCloseRequest(EventHandler<WindowEvent> value)   

Il y a un exemple

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X