JavaFX Scene - Buttonklick abwarten

javapolizei

Mitglied
Hallo,
folgendes Problem:

Ich arbeite an einem Tunierverwaltungsprogramm und möchte in der GUI wie folgt vorgehen
  1. Tuniermodus auswählen
  2. Mannschaft erstellen (Mannschaftsname, SpielerAnzahl)
  3. Trainer erstellen --> nur bei index = 0
  4. Spieler erstellen --> bei allen Indizes > 0 bis zur eingegebenen SpielerAnzahl
Wenn aktuell die Schleife ausgeführt wird, dann "rennt" mir das Programm durch alle Fenster durch und ich sehe nur noch das Eingabefenster für den letzten Spieler. Meine Frage ist also, wie ich es schaffe, dass bei der Scene der Trainereingabe pausiert wird bis der Button "Submit" geklickt wird, dann soll zur Eingabe des 1. Spielers gewechselt werden, erneutes Warten auf klicken von "Submit", wechsel zur Eingabe des 2. Spielers, usw.

Ich hatte probiert bei den jeweiligen neuen Scenen showAndWait() zu benutzen, dann wurde zwar bei der Trainereingabe gestoppt aber eine Exception geworfen und das Programm war damit auch am Ende.

Die folgenden Code-Auszüge sind nur aus dem JavaFX - Teil. Der eigentliche Programmcode (Mannschaft, Trainer, Spieler usw.) sollte nicht relevant sein denke ich, da ja hier nur die Konstruktoren davon aufgerufen werden.

Methode mannschaftErzeugen
Java:
private Mannschaft mannschaftErzeugen(String mannschaftsname, String spielerAnzahl) {
        int zahlSpieler = Integer.parseInt(spielerAnzahl);
       
        Mannschaft aktuell = new Mannschaft(mannschaftsname, zahlSpieler);
       
        for (int i = 0; i < zahlSpieler+1; i++) {
            if (i == 0) {
                aktuell.mitglieder[i] = trainerErzeugen(mannschaftsname);
            } else if (i > 0){
                aktuell.mitglieder[i] = spielerErzeugen(mannschaftsname, i);
            }
        }   
        return aktuell;
    }

Methode trainerErzeugen
Java:
private Trainer trainerErzeugen(String mannschaftsname) {
       
        //Trainer erzeugen
        GridPane grid2 = new GridPane();
        grid2.setPadding(new Insets(10, 10, 10, 10));
        grid2.setHgap(13);
        grid2.setVgap(8);
       
        // Label vorname
        Label vorname = new Label("Vorname:");
        grid2.add(vorname, 0, 0);
       
        // Field vorname
        TextField vornameInput = new TextField();
        vornameInput.setPromptText("Vorname eingeben");
        grid2.add(vornameInput, 1, 0);
       
        // Label nachname
        Label nachname = new Label("Nachname:");
        grid2.add(nachname, 0, 1);
       
        // Field Nachname
        TextField nachnameInput = new TextField();
        nachnameInput.setPromptText("Nachname eingeben");
        grid2.add(nachnameInput, 1, 1);
       
        // Button submit
        Button submit2 = new Button("Submit");
        grid2.add(submit2, 1, 2);
        submit2.setOnAction( e -> {
            trainerAktuell = new Trainer(this.mannschaftsname, vornameInput.getText(), nachnameInput.getText());
        });   
       
        trainer = new Scene(grid2);
       
        window.setScene(trainer);
        window.showAndWait();
       
        return trainerAktuell;
    }

Methode spielerErzeugen
Java:
private Spieler spielerErzeugen(String mannschaftsname, int index) {
        //Spieler erzeugen
        GridPane grid3 = new GridPane();
        grid3.setPadding(new Insets(10, 10, 10, 10));
        grid3.setHgap(13);
        grid3.setVgap(8);
       
        //Label index
        Label indexSpieler = new Label("Bitte geben Sie den " + index + ". Spieler ein:");
        grid3.add(indexSpieler, 0, 0);
       
        // Label vorname
        Label vornameSpieler = new Label("Vorname:");
        grid3.add(vornameSpieler, 0, 1);
       
        // Field vorname
        TextField vornameSpielerInput = new TextField();
        vornameSpielerInput.setPromptText("Vorname eingeben");
        grid3.add(vornameSpielerInput, 1, 1);
       
        // Label nachname
        Label nachnameSpieler = new Label("Nachname:");

        grid3.add(nachnameSpieler, 0, 2);
       
        // Field Nachname
        TextField nachnameSpielerInput = new TextField();
        nachnameSpielerInput.setPromptText("Nachname eingeben");
        grid3.add(nachnameSpielerInput, 1, 2);
       
        // Label Trikotnummer
        Label trikotnummer = new Label("Trikotnummer:");
        grid3.add(trikotnummer, 0, 3);
       
        // Field Trikotnummer
        TextField trikotnrInput = new TextField();
        trikotnrInput.setPromptText("Trikotnummer eingeben");
        grid3.add(trikotnrInput, 1, 3);
       
        // Button submit
        Button submit3 = new Button("Submit");
        submit3.setOnAction( e -> {
            spielerAktuell = new Spieler(this.mannschaftsname, vornameSpielerInput.getText(), nachnameSpielerInput.getText(),
                                            Integer.parseInt(trikotnrInput.getText()));
        });
        grid3.add(submit3, 1, 4);
       
        // Scene
        spielerEingabe = new Scene(grid3);
        window.setScene(spielerEingabe);
        window.showAndWait();
       
        return spielerAktuell;
    }


Start - Methode

Java:
@Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        window.setTitle("Tunierverwaltung");
       
        //Start - Auswahl Pokalmodus oder AlleGegenAlle
        HBox hbox = new HBox();
       
        Button alleGegenAlle = new Button("AlleGegenAlle");
        alleGegenAlle.setOnAction( e -> window.setScene(mannschaftsEingabe));
       
        Button pokalmodus = new Button("Pokalmodus");
        pokalmodus.setOnAction(e -> window.setScene(mannschaftsEingabe));
       
        hbox.getChildren().addAll(alleGegenAlle, pokalmodus);
        start = new Scene(hbox);
       
        //---------------------------------------------------------------------------
       
        //Mannschaft erzeugen
        GridPane grid1 = new GridPane();
        grid1.setPadding(new Insets(10, 10, 10, 10));
        grid1.setHgap(13);
        grid1.setVgap(8);
       
        //Label mannschaftsname
        Label mannschaftsname = new Label("Mannschaftsname:");
        grid1.add(mannschaftsname, 0, 0);
       
        //Field mannschaftsname
        TextField mname = new TextField();
        mname.setPromptText("Mannschaftsname eingeben");
        grid1.add(mname, 1, 0);
       
        //Label Anzahl der Spieler
        Label anzahlSpieler = new Label("Anzahl der Spieler:");
        grid1.add(anzahlSpieler, 0, 1);

        //Field Anzahl der Spieler
        TextField zahlSpieler = new TextField();
        zahlSpieler.setPromptText("Spieleranzahl eingeben");
        grid1.add(zahlSpieler, 1, 1);
       
        //Button submit
        Button submit1 = new Button("Submit");
        submit1.setOnAction( e -> {
            mannschaftErzeugen(mname.getText(), zahlSpieler.getText());
        });    
        grid1.add(submit1, 1, 2);
       
        mannschaftsEingabe = new Scene(grid1);
       
        //---------------------------------------------------------------------------
       
       
   
        //---------------------------------------------------------------------------
       
       
       
        //---------------------------------------------------------------------------
       
        window.setScene(start);
        window.show();
   
    }


IDE ist Eclipse, Betriebssystem Win 10.
 

udo-100

Mitglied
hallo,
also ich würde für die Eingabe des Trainers und der Spieler jeweils ein eigenes Dialogfenster öffnen das modal gestartet wird und die Daten dann bei betätigen eines "OK" Buttons zurück gibt.
 

javapolizei

Mitglied
Okay, danke für den Vorschlag.
Habs jetzt so geändert, dass die Eingabe von Mannschaft, Trainer und den Spielern jeweils in einem eigenen Fenster erfolgt. Das funktioniert auch so weit, also die komplette Schleife wird durchlaufen, so wie das gedacht war, aber am Ende der Spielereingabe gibt's eine neue Exception.

Java:
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.NullPointerException
    at application.GUI.main(GUI.java:31)
    ... 11 more
Exception running application application.GUI

Ich weiß ehrlich gesagt woran das liegt. Kann es sein, dass es was damit zu tun hat das alle Fenster (bzw. Stages) geschlossen werden?
Das sollte ja aber auch passieren, denn nach der Eingabe des letzten Spielers ist ja der aktuelle Vorgang beendet.
 

dzim

Top Contributor
Es bedeutet, dass das Objekt, auf dem du etwas zu tun versuchst, noch nicht initialisiert wurde. Das Ganze passiert in Zeile 32 deiner Klasse GUI.java.
Steht doch alles da im StackTrace...
 

javapolizei

Mitglied
Mit der Interpretierung des StackTrace hab ich noch nicht ganz so viel Erfahrung...
Aber danke auf jeden Fall, hab den Fehler gefunden und behoben! (Ich wollte testen ob die Werte die ich zuvor eingegeben hatte auch gespeichert wurden und dann diese abfrage. Bei der Abfrage hatte ich nen Fehler gemacht)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
N JavaFX Einfacher Taschenrechner mit Scene Builder und Java FX AWT, Swing, JavaFX & SWT 0
B Scene Builder Textfeld Begrenzen AWT, Swing, JavaFX & SWT 3
Tippster JavaFX Scene neu berechnen lassen AWT, Swing, JavaFX & SWT 5
I Scene Builder - mehrere Seiten AWT, Swing, JavaFX & SWT 6
T Scene wechseln über ManuItem AWT, Swing, JavaFX & SWT 7
J JavaFX Schiffe versenken mit JavaFX und Scene builder AWT, Swing, JavaFX & SWT 3
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
N setOnKeyPressed ohne Scene AWT, Swing, JavaFX & SWT 2
G JavaFX Scene ausdrucken nicht möglich, Seite leer AWT, Swing, JavaFX & SWT 5
D Verschieden Scenen ansprechen mit dem Scene Builder und JavaFX (Eclipse) AWT, Swing, JavaFX & SWT 16
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
izoards Scene Builder vs. reality..... AWT, Swing, JavaFX & SWT 8
H JavaFX JavaFX - Scene Builder - BorderPane AWT, Swing, JavaFX & SWT 23
T Scene-Wechsel manchmal weiss AWT, Swing, JavaFX & SWT 3
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
S Scene Builder Fehlermeldung (Anfängerprobleme) AWT, Swing, JavaFX & SWT 0
S Scene Builder Fehlermeldung (Anfängerprobleme) AWT, Swing, JavaFX & SWT 8
L JavaFX AnchorPane an die Größe der Scene oder Window binden? AWT, Swing, JavaFX & SWT 3
M error: package javafx.scene.web is not visible import javafx.scene.web.*; AWT, Swing, JavaFX & SWT 16
R JavaFX Scene Builder Grundsätzliches AWT, Swing, JavaFX & SWT 6
S JavaFX Unterschiede zwischen Scene Builder 2.0 und der ausgeführten App AWT, Swing, JavaFX & SWT 17
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
S JavaFX Scene öffnet sich nicht AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
D Canvas oder scene graph? AWT, Swing, JavaFX & SWT 16
FRI3ND JavaFX: Wie kann ich einer Scene Argumente übergeben? AWT, Swing, JavaFX & SWT 14
R Größe von Scene und stage an grid anpassen AWT, Swing, JavaFX & SWT 4
I Zweite Scene aufrufen AWT, Swing, JavaFX & SWT 4
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
B JavaFX Grundlegende Verständnisfrage JavaFX<->Scene Builder AWT, Swing, JavaFX & SWT 12
D Gluon Scene Builder Custom AWT, Swing, JavaFX & SWT 0
R Scene speichern AWT, Swing, JavaFX & SWT 7
I JavaFX-Scene-Überlagerung/Wechsel mit pausieren der anderen Scene AWT, Swing, JavaFX & SWT 0
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX GUI mit JavaFX. Scene Builder source code? AWT, Swing, JavaFX & SWT 6
O JavaFX Aktualisierung der Scene AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
D javafx.scene.control.TreeView als dropdown Menü AWT, Swing, JavaFX & SWT 6
M JavaFX Scene wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
n00b4u JavaFX Scene-Builder Ressourcengrab? AWT, Swing, JavaFX & SWT 0
I Scene Builder kann .fxml nicht mehr laden AWT, Swing, JavaFX & SWT 3
javampir Java FX Scene Management AWT, Swing, JavaFX & SWT 1
boscho87 JavaFX Variabeln an neue Scene übergeben AWT, Swing, JavaFX & SWT 0
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
L JavaFX Horizontale Linie zur Scene binding AWT, Swing, JavaFX & SWT 3
B JavaFX Scene Builder: resize funktioniert (meist) nicht AWT, Swing, JavaFX & SWT 6
M JavaFX Wo finde ich den Scene Builder? AWT, Swing, JavaFX & SWT 3
L JavaFX Scene wechseln unter FX AWT, Swing, JavaFX & SWT 5
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
F JavaFX Scene Builder AWT, Swing, JavaFX & SWT 2
F JavaFX Scene Builder AWT, Swing, JavaFX & SWT 3
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
D JavaFX Scene Builder 2.0 einfügen einer CheckBoxListCell AWT, Swing, JavaFX & SWT 0
M JavaFX Fenstersteuerung in scene builder AWT, Swing, JavaFX & SWT 2
B JavaFX Problem bei Kamera / Group, gesamte Scene bewegt sich mit AWT, Swing, JavaFX & SWT 0
N JavaFX TreeTable Scene Builder AWT, Swing, JavaFX & SWT 8
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
F GUI Einstieg (Scene Builder) AWT, Swing, JavaFX & SWT 3
H JavaFx - Scene Builder 2.0 - Classpath AWT, Swing, JavaFX & SWT 2
J JavaFX Variable an neue Scene übergeben AWT, Swing, JavaFX & SWT 8
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
M JFX8 Mixed 2D and 3D, Scene Subscene incorrect drawing 3ds-file AWT, Swing, JavaFX & SWT 6
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
S Bekomme bein Buttonklick das Jtextfield nicht ausgegeben AWT, Swing, JavaFX & SWT 8
A JPanel wird nach Buttonklick nicht angezeigt AWT, Swing, JavaFX & SWT 2
J JavaFX Subfenster bei Buttonklick/Menüauswahl AWT, Swing, JavaFX & SWT 5
C Methode über Buttonklick starten AWT, Swing, JavaFX & SWT 8
F JFrame nach Buttonklick 3 Sekunden warten, bevor es sich ändert AWT, Swing, JavaFX & SWT 2
J Spielstart nach Buttonklick AWT, Swing, JavaFX & SWT 4
X Swing Bei Buttonklick soll PopupMenu erscheinen AWT, Swing, JavaFX & SWT 2
B Ein Actionaufruf durch Entertaste oder Buttonklick? AWT, Swing, JavaFX & SWT 7
B JFrame bei buttonklick schließen AWT, Swing, JavaFX & SWT 2
L JTable nach Buttonklick auslesen [NetBeans] AWT, Swing, JavaFX & SWT 4
E Zugriff auf JTextField nach Buttonklick AWT, Swing, JavaFX & SWT 6
B Eingaben im JDialog abwarten AWT, Swing, JavaFX & SWT 4
V Ende eines Frames abwarten AWT, Swing, JavaFX & SWT 7
A Ende eines Dialoges abwarten AWT, Swing, JavaFX & SWT 16
E Swing GUI aufbau abwarten? AWT, Swing, JavaFX & SWT 3
J Verzögerung bei Änderungen der Anzeige abwarten AWT, Swing, JavaFX & SWT 5
C Thread - Beendigung unter Swing abwarten AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben