Heim  >  Artikel  >  Java  >  Wie erstelle ich mehrere JavaFX-Windows, ohne launch() aufzurufen?

Wie erstelle ich mehrere JavaFX-Windows, ohne launch() aufzurufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-24 06:19:01428Durchsuche

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

So rufen Sie launch() mehr als einmal in Java auf

Die JavaFX-Anwendungsstartmethode launch() ist für den Aufruf konzipiert nur einmal pro Bewerbung. Der Versuch, launch() mehr als einmal aufzurufen, führt zu einem „IllegalStateException“-Fehler.

Lösung: Schließen Sie die nachfolgende Fenstererstellung in Platform.runLater() ein

Anstatt aufzurufen Wenn Sie launch() mehrmals ausführen, sollten Sie den folgenden Ansatz in Betracht ziehen:

  1. Rufen Sie launch() einmal auf, um die JavaFX-Laufzeitumgebung zu initialisieren und das Hauptfenster zu erstellen.
  2. Lassen Sie die JavaFX-Laufzeitumgebung im Hintergrund laufen mit Platform.setImplicitExit(false). Dadurch wird verhindert, dass JavaFX automatisch heruntergefahren wird, wenn das Hauptfenster geschlossen wird.
  3. Wenn Sie ein neues Fenster anzeigen müssen, schließen Sie dessen Erstellung und Anzeige in einen Platform.runLater()-Block ein. Dadurch wird sichergestellt, dass JavaFX-Vorgänge im Anwendungsthread ausgeführt werden.

Beispielcode:

<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>

Hinweis:

  • Die obige Wumpus-Klasse demonstriert den Ansatz mit einer benutzerdefinierten JavaFX-Anwendung.
  • Zur Verwendung mit Swing-Komponenten kann ein JFXPanel anstelle einer Anwendung verwendet werden.
  • Aufrufende Plattform. exit() beendet die JavaFX-Laufzeitumgebung, daher ist es wichtig, diese Methode aufzurufen, wenn alle JavaFX-Vorgänge abgeschlossen sind.

Das obige ist der detaillierte Inhalt vonWie erstelle ich mehrere JavaFX-Windows, ohne launch() aufzurufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn