ventanas ventana con como close cerrar boton aplicación actual java javafx javafx-2 javafx-8

ventana - close stage javafx button



¿Cómo cerrar una aplicación JavaFX en la ventana cerrada? (11)

En Swing puedes simplemente usar setDefaultCloseOperation() para cerrar toda la aplicación cuando la ventana está cerrada.

Sin embargo, en JavaFX no puedo encontrar un equivalente. Tengo varias ventanas abiertas y quiero cerrar toda la aplicación si se cierra una ventana. ¿Cuál es la forma de hacerlo en JavaFX?

Editar:

Entiendo que puedo anular setOnCloseRequest() para realizar alguna operación al cerrar la ventana. La pregunta es: ¿qué operación se debe realizar para finalizar toda la aplicación?

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

El método stop() definido en la clase Application no hace nada.



Algunas de las respuestas proporcionadas no me funcionaron (javaw.exe todavía se está ejecutando después de cerrar la ventana) o, eclipse mostró una excepción después de que se cerró la aplicación.

Por otro lado, esto funciona perfectamente:

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


Como referencia, aquí hay una implementación mínima usando 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... }


DEBE anular el método "stop ()" en su instancia de la Aplicación para que funcione. Si ha anulado incluso el vacío de "stop ()", la aplicación se cierra correctamente después de cerrar la última etapa (en realidad, la última etapa debe ser la etapa principal para que funcione completamente como debería). No se necesitan llamadas Platform.exit o setOnCloseRequest adicionales en ese caso.


Esto pareció funcionar para mí:

EventHandler<ActionEvent> quitHandler = quitEvent -> { System.exit(0); }; // Set the handler on the Start/Resume button quit.setOnAction(quitHandler);


La aplicación se detiene automáticamente cuando se cierra la última Stage . En este momento, se llama al método stop() de su clase de Application , por lo que no necesita un equivalente a setDefaultCloseOperation()

Si desea detener la aplicación antes de eso, puede llamar a Platform.exit() , por ejemplo, en su llamada onCloseRequest .

Puede obtener toda esta información en la página de Application javadoc: http://docs.oracle.com/javafx/2/api/javafx/application/Application.html


Para mí, solo seguir está funcionando:

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


Tratar

System.exit(0);

esto debería terminar el hilo principal y finalizar el programa principal


Usando Java 8 esto funcionó para mí:

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


getContentPane.remove (jfxPanel);

intentalo (:


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