„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erstelle ich mehrere JavaFX-Windows, ohne launch() aufzurufen?

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

Veröffentlicht am 09.11.2024
Durchsuche:424

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-Laufzeit zu initialisieren und zu erstellen Hauptfenster.
  2. Lassen Sie die JavaFX-Laufzeit im Hintergrund laufen, indem Sie Platform.setImplicitExit(false) verwenden. 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-Operationen im Anwendungsthread ausgeführt werden.

Beispielcode:

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

Hinweis:

  • Die obige Wumpus-Klasse demonstriert den Ansatz mit einer benutzerdefinierten JavaFX-Anwendung.
  • Zur Verwendung mit Swing-Komponenten: a JFXPanel kann anstelle einer Anwendung verwendet werden.
  • Der Aufruf von Platform.exit() beendet die JavaFX-Laufzeitumgebung, daher ist es wichtig, dies aufzurufen Methode, wenn alle JavaFX-Vorgänge abgeschlossen sind.
Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729695676 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3