Comment fermer une application JavaFX à la fermeture de la fenêtre?
Dans Swing, vous pouvez simplement utiliser setDefaultCloseOperation()
pour arrêter toute l'application lorsque la fenêtre est fermée.
Cependant, dans JavaFX, Je ne trouve pas d'équivalent. J'ai plusieurs fenêtres ouvertes et je veux fermer toute l'application si une fenêtre est fermée. Quelle est la façon de le faire dans JavaFX?
Modifier:
Je comprends que je peux remplacer setOnCloseRequest()
pour effectuer une opération à la fermeture de la fenêtre. La question Est de savoir quelle opération doit être effectuée pour terminer l'ensemble application?
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
stop();
}
});
La méthode stop()
définie dans la classe Application
ne fait rien.
11 réponses
, L'application s'arrête automatiquement lorsque le dernier Stage
est fermé. En ce moment, la méthode stop()
de votre classe Application
est appelée, vous n'avez donc pas besoin d'un équivalent à setDefaultCloseOperation()
Si vous voulez arrêter l'application avant que, vous pouvez l'appeler Platform.exit()
, par exemple dans votre {[5],} appeler.
Vous pouvez avoir toutes ces informations sur la page javadoc de Application
: http://docs.oracle.com/javafx/2/api/javafx/application/Application.html
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'autre part, cela fonctionne parfaitement:
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent t) {
Platform.exit();
System.exit(0);
}
});
Pour référence, voici une implémentation 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...
}
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
Platform.exit();
System.exit(0);
}
}
Avez-vous essayé ceci..setOnCloseRequest
setOnCloseRequest(EventHandler<WindowEvent> value)
Il est un exemple
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);
});
}
Cela semblait fonctionner pour moi:
EventHandler<ActionEvent> quitHandler = quitEvent -> {
System.exit(0);
};
// Set the handler on the Start/Resume button
quit.setOnAction(quitHandler);
Essayez
System.exit(0);
Cela devrait terminer le thread main et mettre fin au programme principal
Pour moi seulement 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();
}
});
Vous devez remplacer la méthode" stop () " dans votre instance D'Application pour que cela fonctionne. Si vous avez remplacé même "stop ()" vide, l'application s'arrête gracieusement après la fermeture de la dernière étape(en fait, la dernière étape doit être l'étape primaire pour que cela fonctionne complètement comme supposé l'être). Aucune plate-forme supplémentaire.les appels exit ou setOnCloseRequest sont nécessaires dans ce cas.