"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como criar várias janelas JavaFX sem recuperar o lançamento ()?

Como criar várias janelas JavaFX sem recuperar o lançamento ()?

Publicado em 2024-11-09
Navegar:121

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

Como chamar launch() mais de uma vez em Java

O método de inicialização do aplicativo JavaFX, launch(), foi projetado para ser chamado apenas uma vez por aplicação. Tentar chamar launch() mais de uma vez resulta em um erro "IllegalStateException".

Solução: agrupar a criação de janela subsequente em Platform.runLater()

Em vez de chamar launch() várias vezes, considere a seguinte abordagem:

  1. Chame launch() uma vez para inicializar o tempo de execução JavaFX e criar a janela principal.
  2. Mantenha o tempo de execução JavaFX em execução em segundo plano usando Platform.setImplicitExit (falso). Isso evita que o JavaFX seja desligado automaticamente quando a janela principal é fechada.
  3. Quando você precisar exibir uma nova janela, envolva sua criação e exibição em um bloco Platform.runLater(). Isso garante que as operações JavaFX sejam executadas no thread do aplicativo.

Código de exemplo:

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:

  • A classe Wumpus acima demonstra a abordagem com um aplicativo JavaFX personalizado.
  • Para uso com componentes Swing, um JFXPanel pode ser usado em vez de um aplicativo.
  • Chamar Platform.exit() encerrará o tempo de execução JavaFX, portanto, é importante chamar esse método quando todas as operações JavaFX forem concluídas.
Declaração de lançamento Este artigo foi reimpresso em: 1729695676 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3