ホームページ  >  記事  >  Java  >  launch() を呼び出さずに複数の JavaFX ウィンドウを作成するにはどうすればよいですか?

launch() を呼び出さずに複数の JavaFX ウィンドウを作成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 06:19:01428ブラウズ

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

Java で launch() を複数回呼び出す方法

JavaFX アプリケーションの起動メソッド launch() は、呼び出されるように設計されています申請ごとに 1 回のみ。 launch() を複数回呼び出そうとすると、「IllegalStateException」エラーが発生します。

解決策: 後続のウィンドウの作成を Platform.runLater()

を呼び出す代わりにラップします。 launch() を複数回実行する場合は、次のアプローチを検討してください。

  1. launch() を 1 回呼び出して、JavaFX ランタイムを初期化し、メイン ウィンドウを作成します。
  2. バックグラウンドで JavaFX ランタイムを実行し続けます。 Platform.setImplicitExit(false) を使用します。これにより、メイン ウィンドウが閉じられたときに JavaFX が自動的にシャットダウンされなくなります。
  3. 新しいウィンドウを表示する必要がある場合は、その作成と表示を Platform.runLater() ブロックでラップします。これにより、JavaFX 操作がアプリケーション スレッドで確実に実行されます。

コード例:

<code class="java">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();
        });
    }
}</code>

注:

  • 上記の Wumpus クラスは、カスタム JavaFX アプリケーションを使用したアプローチを示しています。
  • Swing コンポーネントで使用する場合、アプリケーションの代わりに JFXPanel を使用できます。
  • 呼び出しプラットフォーム。 exit() は JavaFX ランタイムを終了するため、すべての JavaFX 操作が完了したときにこのメソッドを呼び出すことが重要です。

以上がlaunch() を呼び出さずに複数の JavaFX ウィンドウを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。