"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo crear múltiples ventanas JavaFX sin recordar el lanzamiento ()?

¿Cómo crear múltiples ventanas JavaFX sin recordar el lanzamiento ()?

Publicado el 2024-11-09
Navegar:243

How to Create Multiple JavaFX Windows without Recalling launch()?

Cómo llamar a launch() más de una vez en Java

El método de inicio de la aplicación JavaFX, launch(), está diseñado para ser llamado sólo una vez por aplicación. Intentar llamar a launch() más de una vez genera un error "IllegalStateException".

Solución: ajustar la creación de ventanas posteriores en Platform.runLater()

En lugar de llamar launch() varias veces, considere el siguiente enfoque:

  1. Llame a launch() una vez para inicializar el tiempo de ejecución de JavaFX y crear la ventana principal.
  2. Mantenga el tiempo de ejecución de JavaFX ejecutándose en segundo plano usando Platform.setImplicitExit (falso). Esto evita que JavaFX se cierre automáticamente cuando se cierra la ventana principal.
  3. Cuando necesite mostrar una nueva ventana, ajuste su creación y muéstrela en un bloque Platform.runLater(). Esto garantiza que las operaciones JavaFX se ejecuten en el subproceso de la aplicación.

Código de ejemplo:

public class Wumpus extends Application {
    private static final Insets SAFETY_ZONE = new Insets(10);
    private Label cowerInFear = new Label();
    private Stage mainStage;

    @Override
    public void start(final Stage stage) {
        mainStage = stage;
        mainStage.setAlwaysOnTop(true);
        Platform.setImplicitExit(false);
        cowerInFear.setPadding(SAFETY_ZONE);

        cowerInFear.setOnMouseClicked(event -> Platform.exit());
        stage.setScene(new Scene(cowerInFear));
    }

    public static void main(String[] args) {
        launch(args);

        // Another window can be created here by wrapping its creation
        // and display in a Platform.runLater() block.
        Platform.runLater(() -> {
            Stage newStage = new Stage();
            newStage.setScene(new Scene(new Label("Another Window")));
            newStage.show();
        });
    }
}

Nota:

  • La clase Wumpus anterior demuestra el enfoque con una aplicación JavaFX personalizada.
  • Para usar con componentes Swing, un Se puede utilizar JFXPanel en lugar de una aplicación.
  • Llamar a Platform.exit() finalizará el tiempo de ejecución de JavaFX, por lo que es importante llamar a este método cuando se completen todas las operaciones de JavaFX.
Declaración de liberación Este artículo se reimprime en: 1729695676 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3