Announcement

Collapse
No announcement yet.

JavaFX Start des Fensters in Klasse

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JavaFX Start des Fensters in Klasse

    Hy, ich versuche gerade das Fenster unter JavaFX in einer anderen Klasse zu Starten (also eine Klasse ohne die main).

    Es gibt wenige Beispiele die das Erklären und ich blicke es nicht. Auch die Beispiele aus NetBeans 7.1.1 sind nicht hilfreich.

    Im Anhang ist ein Beispielprojekt.

    Hier der Code.

    Start-Klasse (main)
    [highlight=java]
    package javaFXTest;

    public class JavaFXTest
    {

    /**
    * @param args
    */
    public static void main(String[] args)
    {
    StartWindow sw = new StartWindow();

    }

    }
    [/highlight]

    Window-Klasse
    [highlight=java]
    package javaFXTest;

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;

    public class StartWindow extends Application
    {
    Stage stage = new Stage();

    public StartWindow()
    {
    start(stage);
    }

    @Override
    public void start(Stage primaryStage) {
    primaryStage.setTitle("Hello World!");
    Button btn = new Button();
    btn.setText("Say 'Hello World'");

    StackPane root = new StackPane();
    root.getChildren().add(btn);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
    }

    }
    [/highlight]

    Die Fehlermeldung ist für mich verwirrend
    Exception in thread "main" java.lang.IllegalStateException: Not on FX application thread; currentThread = main
    at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:218)
    at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUs erThread(QuantumToolkit.java:360)
    at javafx.stage.Stage.<init>(Stage.java:112)
    at javafx.stage.Stage.<init>(Stage.java:98)
    at javaFXTest.StartWindow.<init>(StartWindow.java:11)
    at javaFXTest.JavaFXTest.main(JavaFXTest.java:12)


    Was muss ich beachten?

    Vielen Dank im Voraus

    Gruß Lerando
    Attached Files

  • #2
    Lösung

    Ich habe es herausgefunden.

    Ich muss in der main den Eintrag " launch(args)" stehen lassen und die Übergabe einer neuen Instanz von Stage an die nächste Klasse, kann ich dann ein neues Fenster öffnen.

    Projekt mit der Lösung im Anhang

    Löungsweg für drei Fenster unter javaFX (meine Test-Lösung)
    [highlight=java]
    package javaFXTest;

    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;

    public class JavaFXTest extends Application
    {

    Stage stage;

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
    launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
    primaryStage.setTitle("Menü");
    Button btn = new Button();
    btn.setText("Starte nächstes Fenster");

    btn.setOnAction(new EventHandler<ActionEvent>() {

    @Override
    public void handle(ActionEvent event) {
    stage = new Stage();
    //Starten des nächsten Fensters
    StartWindow sw = new StartWindow();
    sw.start(stage);
    }
    });

    StackPane root = new StackPane();
    root.getChildren().add(btn);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
    }

    }
    [/highlight]

    [highlight=java]
    package javaFXTest;

    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;

    public class StartWindow extends Application
    {
    Stage stage;

    @Override
    public void start(Stage primaryStage) {
    primaryStage.setTitle("Start Fenster");
    Button btn = new Button();
    btn.setText("Sag Hallole");
    btn.setOnAction(new EventHandler<ActionEvent>() {

    @Override
    public void handle(ActionEvent event) {
    stage = new Stage();
    //Starten des nächsten Fensters
    StartWindow2 sw2 = new StartWindow2();
    sw2.start(stage);
    }
    });
    StackPane root = new StackPane();
    root.getChildren().add(btn);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
    }

    }

    [/highlight]

    [highlight=java]
    package javaFXTest;

    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;

    public class StartWindow2 extends Application
    {

    @Override
    public void start(Stage primaryStage) {
    primaryStage.setTitle("Start zweites Fenster");
    Button btn = new Button();
    btn.setText("Sag Servus");




    StackPane root = new StackPane();
    root.getChildren().add(btn);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
    }

    }

    [/highlight]

    Für Optimierungsvorschläge bin ich dankbar.

    Gruß Lerando
    Attached Files

    Comment

    Working...
    X