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.

3voto

madx Points 159

En utilisant Java 8, cela a fonctionné pour moi :

@Override
public void start(Stage stage) {
    Scene scene = new Scene(new Region());
    stage.setScene(scene);

    /* ... OTHER STUFF ... */

    stage.setOnCloseRequest(e -> {
        Platform.exit();
        System.exit(0);
    });
}

3voto

Daniel Ferber Points 181

Au lieu de jouer avec les gestionnaires onCloseRequest ou les événements de fenêtre, je préfère appeler Platform.setImplicitExit(true) au début de la demande.

Selon JavaDocs :

"Si cet attribut est vrai, le moteur d'exécution JavaFX fermera implicitement l'accès à l'ordinateur. implicitement lorsque la dernière fenêtre est fermée ; le lanceur JavaFX appellera la fonction la méthode Application.stop() et met fin à l'application JavaFX JavaFX."

Exemple :

@Override
void start(Stage primaryStage) {
    Platform.setImplicitExit(true)
    ...
    // create stage and scene
}

1voto

Piyush Aghera Points 119

Pour moi, seul le suivant fonctionne :

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {

        Platform.exit();

        Thread start = new Thread(new Runnable() {
            @Override
            public void run() {
                //TODO Auto-generated method stub
                system.exit(0);     
            }
        });

        start.start();
    }
});

0voto

Eddy Zavala Points 124

Cela semble fonctionner pour moi :

EventHandler<ActionEvent> quitHandler = quitEvent -> {

        System.exit(0);

    };
    // Set the handler on the Start/Resume button
    quit.setOnAction(quitHandler);

0voto

DENNIS KITHINJI Points 77

Essayer

 System.exit(0);

cela devrait mettre fin au thread principal et au programme principal

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