2016-06-12 18 views
-1

Wie kann ich ein sekundäres JavaFX-Fenster (stage) von außerhalb der "start" -Methode öffnen? Zum BeispielÖffne ein zweites JavaFX-Fenster von außen start

public class GUI_Test extends Application { 
static Stage secondStage; 

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

@Override 
public void start(Stage primaryStage) throws Exception { 
    primaryStage.setScene(new Scene(
      new VBox(
        new Label("window 1")))); 
    primaryStage.show(); 

    secondStage = new Stage(); 
} 

public static void showSecondWin() { 
    secondStage.setScene(new Scene(
      new VBox(
        new Label("window 2")))); 
    secondStage.show(); 
} 
} 

Der obige Code nur das erste Fenster zeigt („primaryStage“) und (nur), wenn ich es eine java.lang.reflect.InvocationTargetException Fehlermeldung schließen erscheint.

James_D sagte, es gibt eine Möglichkeit, ein zweites Fenster von außen zu öffnen. Wie kann dies erreicht werden?

+0

Es ist anders als bei anderen Fragen, weil ich nicht das zweite Fenster mit einer Schaltfläche oder irgendetwas anderes von der start() -Methode öffnen möchte, wie ich in meinem Kommentar zu sillyfly erklärt habe. –

+1

Sie sollten sich die 'start()' Methode in einer JavaFX Anwendung als Ersatz für die 'main()' Methode in einer "traditionellen" (d. H. Nicht JavaFX) Anwendung vorstellen. (In JavaFX brauchen Sie nicht einmal eine 'main()' Methode!) Also ist 'start()' der Einstiegspunkt für die Anwendung: Alles wird von diesem Punkt aus initiiert. Es macht nicht wirklich Sinn, nach etwas zu fragen, was nicht durch die 'start()' Methode ausgelöst wird. Vielleicht wird [diese Frage] (http://stackoverflow.com/questions/37579645) helfen. –

+0

@James_D Ich möchte das zweite Fenster von einer Methode erstellen (nicht starten), innerhalb der Anwendungsklasse. Die SecondWin-Methode wird von einer anderen Klasse aufgerufen. –

Antwort

3

Aus der Dokumentation für Application:

Die Startmethode nicht zurück, bis die Anwendung beendet wird, entweder über einen Anruf geschlossen wurde Platform.exit oder alle Anwendungsfenster.

Das bedeutet, die zweite Zeile nur in Ihrem main Verfahren nach dem JavaFX Thread beendet aufgerufen wird, so dass Sie keine weiteren Stufen nicht erstellen können.

Sie könnten Ihre zweite Stufe innerhalb der start Methode erstellen und anzeigen. Wenn das keine gültige Option ist, versuchen Sie bitte zu erklären, was Sie erreichen möchten.

+0

Ich möchte ein Dialogfenster öffnen, das von außerhalb der Startmethode ausgelöst wird. Vielleicht kann ich etwas mit der stage.hide() Methode machen? Ich habe versucht, ein bisschen damit zu spielen, aber es hat nicht funktioniert ... –

+0

Was ist der Auslöser, um die andere Stufe zu öffnen? Warum kann es nicht ausgedrückt werden, bis die Anwendung beendet wird? – Itai

+0

Ich möchte das zweite Fenster von einer Methode erstellen (nicht starten), innerhalb der Anwendungsklasse. Die SecondWin-Methode wird von einer anderen Klasse aufgerufen. –