JavaFX mit JDK 12

Dainka

Mitglied
Hi,

nach unzähligen Foren hoffe ich dass mir hier jemanden weiterhelfen kann.
Meine Java Kenntnisse sind grad nicht die größten weswegen ich selbst mit kleinsten Fehlern schon bisschen länger brauche..

Mir werden folgende Fehler angezeigt:


Java:
"C:\Program Files\Java\jdk-12.0.1\bin\java.exe" --add-modules javafx.base,javafx.graphics --add-reads javafx.base=ALL-UNNAMED --add-reads javafx.graphics=ALL-UNNAMED -Djava.library.path=C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1.1\lib\idea_rt.jar=52610:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\kirin\IdeaProjects\HSHL\out\production\HSHL;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\src.zip;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx-swt.jar;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx.web.jar;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx.base.jar;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx.fxml.jar;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx.media.jar;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx.swing.jar;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx.controls.jar;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx.graphics.jar -p C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx.base.jar;C:\Users\kirin\Downloads\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib\javafx.graphics.jar spiel.Spiel
Exception in Application start method
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x5adda196) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x5adda196
    at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38)
    at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056)
    at spiel.Spiel.start(Spiel.java:28)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    ... 1 more
Exception running application spiel.Spiel

Process finished with exit code 1


Danke im Voraus..
 
Zuletzt bearbeitet von einem Moderator:

mrBrown

Super-Moderator
Mitarbeiter
Der Fehler liegt aktuell daran, das JavaFX modularisiert ist, deine Applikation aber nicht, deshalb wirft das in diesem Fall Fehler.
Du hast zwei Möglichkeiten: entweder das Modulsystem ganz nutzen, oder es garnicht nutzen.

Mit Modulsystem: eine module-info erstellen und die passenden Dinge angeben, dann sollte das mit IntelliJ ausführbar sein.

Wenn du nur das Package "spiel" hast, müsste die grob so aussehen:
Java:
module spiel {
    requires javafx.controls;
    requires javafx.fxml;
    exports spiel to javafx.graphics;
}

Je nachdem was du nutzt, musst du das natürlich noch anpassen.

Ohne Modulsystem: der Klasse Spiele eine explizite Main-Methode spendieren, und zusätzliche eine "Main"-Klasse erstellen, die eine main-Methode enthält, die nur die Main-Methode in Spiel aufruft. Zum starten dann immer die neue main-Methode benutzen.

Eine zusätzliche Main-Klasse mit main-Methode:
Java:
public class Main {
    public static void main(String[] args) {
        Spiel.main(args);
    }
}

Die Application, ergänzt um eine explizite main-Methode:
Java:
public class Spiel extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }

   //der Rest aus der Klasse
}
 

mrBrown

Super-Moderator
Mitarbeiter
Das ist jetzt immerhin mal eine Fehlermeldung, mit der man arbeiten kann ;)

Was steht denn in der Zeile, in der die Exception geworfen wird?
 

Dainka

Mitglied
und es wird nur noch diese Fehlermeldung angezeigt.
Ich habe bereits per google versucht den Fehler auszumerzen jedoch bislang erfolglos..
12085
 

Dainka

Mitglied
Code bitte in Code-Tags ([CODE=java]//code[/CODE]) und nicht als Screenshot Posten.
Java:
package spiel;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
//import spiel.brett.Grafik;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Spiel extends Application {
    private static AnchorPane root;
    private static List<Pane> liste = new ArrayList<Pane>();
    private static int indexcurrent = 0;
    Spieler sp1, sp2, sp3, sp4;

    static Spiel spielen = new Spiel();
             // aufgrund der Zugriffe in den Controllerclassen Statisch


    @Override
    public void start(Stage primaryStage) throws Exception {
        try {
            root = FXMLLoader.load(getClass().getClassLoader().getResource("/spiel/FXML.fxml"));// lädt start Paine

            liste.add(FXMLLoader.load(getClass().getResource("/spiel/Monopoly.fxml")));// hier wird eine Liste mit allen zu ladenen Scenen erstellt
            liste.add(FXMLLoader.load(getClass().getResource("/spiel/AuswahlMenü.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("/spiel/FigurenMenü.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("/spiel/AuswahlQuiz.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("DesignErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("InfoErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("HSHLErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHLZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHLDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHlVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHlFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHlSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHlSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("AllgErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("AstroErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroSiebteSemster.fxml")));


            root.getChildren().add(liste.get(0)); // holt sich die "Start Paine
            Scene scene = new Scene(root);
            primaryStage.setTitle("HSHL-Monopoly"); // Bestimmt den Tietel des Fensters
            primaryStage.setScene(scene); // legt die Scene aufs Fenster
            primaryStage.show();
        } catch (Exception e) {
            e.printStackTrace();
 

mrBrown

Super-Moderator
Mitarbeiter
Eine Exception fliegt vermutlich dort, wo du die Main-Scene lädst. Vergleich mal den Aufruf mit allen folgenden
 

Dainka

Mitglied
Java:
    @Override
    public void start(Stage primaryStage) throws Exception {
        try {
            root = FXMLLoader.load(getClass().getResource("/spiel/FXML.fxml"));          // lädt start Paine

            liste.add(FXMLLoader.load(getClass().getResource("/spiel/Monopoly.fxml")));// hier wird eine Liste mit allen zu ladenen Scenen erstellt
            liste.add(FXMLLoader.load(getClass().getResource("/spiel/AuswahlMenü.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("/spiel/FigurenMenü.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("/spiel/AuswahlQuiz.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("DesignErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("DesignSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("InfoErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("InfoSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("HSHLErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHLZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHLDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHlVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHlFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHlSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("HSHlSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("AllgErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AllgSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("AstroErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("AstroSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("ScherzErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("ScherzZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("ScherzDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("ScherzVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("ScherzFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("ScherzSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("ScherzSiebteSemster.fxml")));

            liste.add(FXMLLoader.load(getClass().getResource("TechErsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("TechZweiteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("TechDritteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("TechVierteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("TechFunfteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("TechSechsteSemster.fxml")));
            liste.add(FXMLLoader.load(getClass().getResource("TechSiebteSemster.fxml")));


            root.getChildren().add(liste.get(0)); // holt sich die "Start Paine
            Scene scene = new Scene(root);
            primaryStage.setTitle("HSHL-Monopoly"); // Bestimmt den Tietel des Fensters
            primaryStage.setScene(scene); // legt die Scene aufs Fenster
            primaryStage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * +
     * Die Methode soll anhand eines Indexes eine bestimmte Szene aus den Vorhandenen wiedergeben
     *
     * @param index Nummer der Scene
     * @return gibt die Scene zurück die genutzt werden soll
     */
    public static Pane getScene(int index) {

        return liste.get(index);
    }

    /**
     * +
     * Hier wird die aktuelle Scene von der Stage genommen und die gewünschte Scene an Hand des Indexes auf die Stage
     * gelegt und somit aufgerufen
     *
     * @param index
     */
    public static void SetScene(int index) {
        root.getChildren().remove(liste.get(indexcurrent));
        root.getChildren().add(liste.get(index));
        indexcurrent = index;
[LIST=1]
[*]    }
[/LIST]


________________________________________________________________________________________________________________________________________

Main Klasse
root = FXMLLoader.load(getClass().getResource("/spiel/FXML.fxml")); --> Hier soll die Start-Szene geladen werden
________________________________________________________________________________________________________________________________________
@FXML
void handelDesignAction(ActionEvent event){

if (semster == 1){

Spiel.SetScene(4);
} --> Hier soll in der InformatikFragen Klasse die jeweilige Szene aufgerufen und draufgelegt werden
 

Dainka

Mitglied
Ja, die Codes zeigen jetzt zwar keinen Fehler mehr an jedoch lässt sich die Main immer noch nicht ausführen, unterbricht und gibt wie folgt den error weiter aus..*

Es soll ein Quiz werden das aus sieben verschiedenen Runden besteht zu je sieben verschieden Kategorien. Aber ja, eine smartere Lösung ist mir nicht eingefallen ...


*
12090
 

mrBrown

Super-Moderator
Mitarbeiter
Ja, die Codes zeigen jetzt zwar keinen Fehler mehr an jedoch lässt sich die Main immer noch nicht ausführen, unterbricht und gibt wie folgt den error weiter aus..*
Passiert das bei der Ausführung oder beim Kompilieren?

Es soll ein Quiz werden das aus sieben verschiedenen Runden besteht zu je sieben verschieden Kategorien. Aber ja, eine smartere Lösung ist mir nicht eingefallen ...
Eine Fxml, in der die GUI beschreiben ist (ein Text mit frage, mehrere Antwort-Buttons, ...), und die aktuelle Frage jeweils über den Controller zuweisen. Du musst keineswegs alle Texte hardcoded in der FXML angeben.
 

Dainka

Mitglied
Passiert das bei der Ausführung oder beim Kompilieren?


Eine Fxml, in der die GUI beschreiben ist (ein Text mit frage, mehrere Antwort-Buttons, ...), und die aktuelle Frage jeweils über den Controller zuweisen. Du musst keineswegs alle Texte hardcoded in der FXML angeben.


- Es passiert beim Ausführen.
- Habe es jetzt so lösen wollen dass ich einen AuswahlQuizController habe, der dann über den SetScene die jeweilige FXML aufruft, dann die Choicebox einem antwortet und das Label die Frage zugeordnet kriegt.
- Über den NextButtun soll wieder alles geschlossen und die bereits erreichten Punkte gespeichert werden.
 

mrBrown

Super-Moderator
Mitarbeiter
- Es passiert beim Ausführen.
Dann sollte irgendwo auch eine Exception mit StackTrace auftauchen - damit findet man dann den Fehler.

- Habe es jetzt so lösen wollen dass ich einen AuswahlQuizController habe, der dann über den SetScene die jeweilige FXML aufruft, dann die Choicebox einem antwortet und das Label die Frage zugeordnet kriegt.
- Über den NextButtun soll wieder alles geschlossen und die bereits erreichten Punkte gespeichert werden.
Aber das ist doch super umständlich, weil du jetzt 279517 FXML-Dateien hast, die sich jeweils nur in einem Text unterscheiden ;)
 

Dainka

Mitglied
Danke, ich werde versuchen durch das StackTrace den Fehler zu finden..

Und zu den FXML-Dateien fällt mir leider keine einfachere Bzw. keine smartere Lösung ein.
Zufällig welche Vorschläge?
(Eine die das vereinfacht und trotzdem die Funktion mit dem zuordnen von Antwort zu frage beibehält?)
 

mrBrown

Super-Moderator
Mitarbeiter
Danke, ich werde versuchen durch das StackTrace den Fehler zu finden..
Du kannst den Stacktrace auch hier zeigen, dann kann man dir helfen ;)

Und zu den FXML-Dateien fällt mir leider keine einfachere Bzw. keine smartere Lösung ein.
Zufällig welche Vorschläge?
(Eine die das vereinfacht und trotzdem die Funktion mit dem zuordnen von Antwort zu frage beibehält?)
Oben schon geschrieben:

Eine Fxml, in der die GUI beschreiben ist (ein Text mit frage, mehrere Antwort-Buttons, ...), und die aktuelle Frage jeweils über den Controller zuweisen. Du musst keineswegs alle Texte hardcoded in der FXML angeben.

Für die Fragen kannst du einfach eine Liste von Fragen zu nutzen, wobei Fragen dann eine passende Klasse ist, die die Frage und die Antwortmöglichkeiten enthält.
 

Dainka

Mitglied
Du kannst den Stacktrace auch hier zeigen, dann kann man dir helfen ;)


Oben schon geschrieben:



Für die Fragen kannst du einfach eine Liste von Fragen zu nutzen, wobei Fragen dann eine passende Klasse ist, die die Frage und die Antwortmöglichkeiten enthält.


Okay, verstehen tu ich bislang alles.
Jetzt fehlt mir nur noch ein guter Ansatz zur Umsetzung des ganzen..
Zufällig eine Idee?

Und vielen Dank schonmal für die Geduld und die ganzen guten Vorschläge!! :)
 

mrBrown

Super-Moderator
Mitarbeiter
Okay, verstehen tu ich bislang alles.
Jetzt fehlt mir nur noch ein guter Ansatz zur Umsetzung des ganzen..
Zufällig eine Idee?
Na der Ansatz steht doch schon da :)

Du brauchst eine Klasse "Frage". In einer Liste speicherst du dann X fragen.
Dann brauchst du eine FXML, die eine Frage darstellt, also Text für den Fragetext + Checkbox/Button/Whatever für die Antworten. Zu der FXml gehört ein Controller, dieser zeigt die jeweils aktuelle Frage an, wertet die Antwort aus, zeigt dann die nächste Frage an usw.
 

Dainka

Mitglied
Na der Ansatz steht doch schon da :)

Du brauchst eine Klasse "Frage". In einer Liste speicherst du dann X fragen.
Dann brauchst du eine FXML, die eine Frage darstellt, also Text für den Fragetext + Checkbox/Button/Whatever für die Antworten. Zu der FXml gehört ein Controller, dieser zeigt die jeweils aktuelle Frage an, wertet die Antwort aus, zeigt dann die nächste Frage an usw.

Habe es soweit ausprobiert. Jedoch treten noch Probleme auf wenn ich bei de Fragen-/Antwortklasse eine ArrayList definiere..
Ich weiß nicht wie ich mir die im FXML.Controller für die Fragen anzeigen lassen kann..

Könnte man das so nutzen um dem ausgewählten eintrag der choicebox mit meiner "Lösung" zu vergleichen?*

*
Javascript:
@FXML
public void NextButtonPushed (ActionEvent event){
    //Spiel.SetScene(2);choBoxAddLR.getSelectionModel().getSelectedItem()

    if (antworteins.getSelectionModel().getSelectedItem().equals("dass Erdnussbutteram Gaumen klebt")){
        punkte++;
        if (!"dass Erdnussbutteram Gaumen klebt".equals(antworteins.getSelectionModel().getSelectedItem())) {
            punkte--;

        } else if (antworteins.getSelectionModel().getSelectedItem().isEmpty()) {
            punkte--;

        }
    }

}
 

mrBrown

Super-Moderator
Mitarbeiter
Mal anders gefragt: Könntest du so ein Quiz rein mit Kommandozeilen-Bedienung umsetzen?

Bevor du mit GUI anfängst, solltest du die Grundlagen drauf haben, und wenn ich mir das Code-Stück so angucke, fehlt da noch ein bisschen zu...
 

Dainka

Mitglied
Tatsächlich habe ich mich vor 2/3 schon einmal ziemlich intensiv mit Java in der beschäftigt. Damals habe ich auch schon GUI mit swing programmiert in Bluej. Was zwar deutlich umständlicher ist aber mir persönlich viel einfacher fiel. Da dies aber mehr als veraltet ist und auch nicht mehr wirklich verwendet werden, wage ich mich jetzt an Java FXML. Da sich der GUI mit JavaFxml einfach über Scene Builder 2.0 per Drag und Drog erstellen lässt.

Das Programm über Kommandozeilen-Bedienung wäre glaub ich nicht das Problem würde es dann einfach in einer Klasse schreiben. Die Werte mit system.out.println ausgeben lassen und über einen String eingabe und antwort vergleichen.

Mein riesiges Problem ist das umdenken... Stehe echt aufm Schlauch

Meine Java Klasse Kategorie - hier sollen die Fragen und Antworten zu dem jeweiligen Thema gespeicher werden
Java:
package spiel;

import java.util.ArrayList;

public class Kategorien {

    public static ArrayList<String> fragenInformatik = new ArrayList<>();
    public static ArrayList<String> antwortenInformatik = new ArrayList<>();


    public static void getInformatik(){

        fragenInformatik.add(1,"");
        fragenInformatik.add(6,"");
        fragenInformatik.add(11,"");


        antwortenInformatik.add(2,"g");
        antwortenInformatik.add(3,"g");
        antwortenInformatik.add(4,"g");
        antwortenInformatik.add(5,"g");

        antwortenInformatik.add(7,"g");
        antwortenInformatik.add(8,"g");
        antwortenInformatik.add(9,"g");
        antwortenInformatik.add(10,"g");

        antwortenInformatik.add(12,"g");
        antwortenInformatik.add(13,"g");
        antwortenInformatik.add(14,"g");
        antwortenInformatik.add(15,"g");

    }

    public static ArrayList<String> fragenTechnik = new ArrayList<>();
    public static ArrayList<String> antwortenTechnik = new ArrayList<>();

    public static void getTechnik(){

        fragenTechnik.add(16,"");
        fragenTechnik.add(21,"");
        fragenTechnik.add(26,"");

        antwortenTechnik.add(17,"");
        antwortenTechnik.add(18,"");
        antwortenTechnik.add(19,"");
        antwortenTechnik.add(20,"");

        antwortenTechnik.add(22,"");
        antwortenTechnik.add(23,"");
        antwortenTechnik.add(24,"");
        antwortenTechnik.add(25,"");

        antwortenTechnik.add(27,"");
        antwortenTechnik.add(28,"");
        antwortenTechnik.add(29,"");
        antwortenTechnik.add(30,"");
    }
    public static ArrayList<String> fragenHshl = new ArrayList<>();
    public static ArrayList<String> antwortenHshl = new ArrayList<>();

    public static void getHshl(){

        fragenHshl.add(31,"");
        fragenHshl.add(36,"");
        fragenHshl.add(41,"");

        antwortenHshl.add(32,"");
        antwortenHshl.add(33,"");
        antwortenHshl.add(34,"");
        antwortenHshl.add(35,"");

        antwortenHshl.add(37,"");
        antwortenHshl.add(38,"");
        antwortenHshl.add(39,"");
        antwortenHshl.add(40,"");

        antwortenHshl.add(42,"");
        antwortenHshl.add(43,"");
        antwortenHshl.add(44,"");
        antwortenHshl.add(45,"");
    }

    public static ArrayList<String> fragenDesign = new ArrayList<>();
    public static ArrayList<String> antwortenDesign = new ArrayList<>();


    public static void getDesign(){

        fragenDesign.add(46,"");
        fragenDesign.add(51,"");
        fragenDesign.add(56,"");

        antwortenDesign.add(47,"");
        antwortenDesign.add(48,"");
        antwortenDesign.add(49,"");
        antwortenDesign.add(50,"");

        antwortenDesign.add(52,"");
        antwortenDesign.add(53,"");
        antwortenDesign.add(54,"");
        antwortenDesign.add(55,"");

        antwortenDesign.add(57,"");
        antwortenDesign.add(58,"");
        antwortenDesign.add(59,"");
        antwortenDesign.add(60,"");

    }

    public static ArrayList<String> fragenAllg = new ArrayList<>();
    public static ArrayList<String> antwortenAllg = new ArrayList<>();

    public static void getAllg(){

        fragenAllg.add(61,"");
        fragenAllg.add(66,"");
        fragenAllg.add(71,"");

        antwortenAllg.add(62,"");
        antwortenAllg.add(63,"");
        antwortenAllg.add(64,"");
        antwortenAllg.add(65,"");

        antwortenAllg.add(67,"");
        antwortenAllg.add(68,"");
        antwortenAllg.add(69,"");
        antwortenAllg.add(70,"");

        antwortenAllg.add(72,"");
        antwortenAllg.add(73,"");
        antwortenAllg.add(74,"");
        antwortenAllg.add(75,"");
    }

    public static ArrayList<String> fragenScherz = new ArrayList<>();
    public static ArrayList<String> antwortenScherz = new ArrayList<>();

    public static void getScherz(){

        fragenScherz.add(76,"");
        fragenScherz.add(81,"");
        fragenScherz.add(86,"");

        antwortenScherz.add(77,"");
        antwortenScherz.add(78,"");
        antwortenScherz.add(79,"");
        antwortenScherz.add(80,"");

        antwortenScherz.add(82,"");
        antwortenScherz.add(83,"");
        antwortenScherz.add(84,"");
        antwortenScherz.add(85,"");

        antwortenScherz.add(87,"");
        antwortenScherz.add(88,"");
        antwortenScherz.add(89,"");
        antwortenScherz.add(90,"");
    }

    public static ArrayList<String> fragenAstro = new ArrayList<>();
    public static ArrayList<String> antwortenAstro = new ArrayList<>();

    public static void getAstro(){

        fragenAstro.add(91,"");
        fragenAstro.add(96,"");
        fragenAstro.add(101,"");

        antwortenAstro.add(92,"");
        antwortenAstro.add(93,"");
        antwortenAstro.add(94,"");
        antwortenAstro.add(95,"");

        antwortenAstro.add(97,"");
        antwortenAstro.add(98,"");
        antwortenAstro.add(99,"");
        antwortenAstro.add(100,"");

        antwortenAstro.add(102,"");
        antwortenAstro.add(103,"");
        antwortenAstro.add(104,"");
        antwortenAstro.add(105,"");

    }


}



Hier mein TechnikController für mein Technik.fxml ,hier soll das Label und die Choicebox mit den jeweiligen werten gefüllt und angezeigt werden. Aber da hakt es bei mir leider ...

Java:
package spiel;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;

public class TechnikController {

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private Label textFrage;

    @FXML
    private AnchorPane PaneTechnik;

    @FXML
    private Button weiter,prüfen;

    @FXML
    private ChoiceBox<String> textAntwort;

    public static int punkte;

    @FXML
    void handelWeiterAction(ActionEvent event) {



    }

    @FXML
    void handelPrüfenAction(ActionEvent event) {



    }

    @FXML
    void initialize() {
        assert textFrage != null : "fx:id=\"textFrage\" was not injected: check your FXML file 'Technik.fxml'.";
        assert PaneTechnik != null : "fx:id=\"PaneTechnik\" was not injected: check your FXML file 'Technik.fxml'.";
        assert weiter != null : "fx:id=\"weiter\" was not injected: check your FXML file 'Technik.fxml'.";
        assert prüfen != null : "fx:id=\"prüfen\" was not injected: check your FXML file 'Technik.fxml'.";
        assert textAntwort != null : "fx:id=\"textAntwort\" was not injected: check your FXML file 'Technik.fxml'.";

    }
}


    @FXML
    void handelPrüfenAction(ActionEvent event) {



    }

    @FXML
    void initialize() {
        assert textFrage != null : "fx:id=\"textFrage\" was not injected: check your FXML file 'Technik.fxml'.";
        assert PaneTechnik != null : "fx:id=\"PaneTechnik\" was not injected: check your FXML file 'Technik.fxml'.";
        assert weiter != null : "fx:id=\"weiter\" was not injected: check your FXML file 'Technik.fxml'.";
        assert prüfen != null : "fx:id=\"prüfen\" was not injected: check your FXML file 'Technik.fxml'.";
        assert textAntwort != null : "fx:id=\"textAntwort\" was not injected: check your FXML file 'Technik.fxml'.";

    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Für den Anfang solltest du dir mal über sinnvolle Klassen Gedanken machen, deine Kategorien-Klasse ist so ziemlich die schlechteste Umsetzung, die man sich dafür überlegen könnte...

Als erstes könntest du dir überlegen, welche Klassen es geben müsste, um das Problem abzubilden. zB Quiz, Frage, Antwort, ...
 

Dainka

Mitglied
Für den Anfang solltest du dir mal über sinnvolle Klassen Gedanken machen, deine Kategorien-Klasse ist so ziemlich die schlechteste Umsetzung, die man sich dafür überlegen könnte...

Als erstes könntest du dir überlegen, welche Klassen es geben müsste, um das Problem abzubilden. zB Quiz, Frage, Antwort, ...


Ok, ja wie gesagtbei mir hakts mit der Umsetzung bzw damit den besten und einfachsten Weg zu finden um mein Problem zu lösen.Wenn ich es deinen Aussagen entnehme wäre es also sinnvoller für Fragen und Antworten eine eigen Klasse zu schreiben.

Diesen Ansatz habe ich jetzt auch verfolgt und für Frage, Antwort und KarteController(Quizkarte) eine eigene Klasse erstellt. Die Karte ist eine fxml mit Button, Label und Checkbox. Ich habe in den Klassen Fragen und Antworten jeweils eine ArrayList erstellt, habe ihnen ein Index und einen String zu gewiesen.

Nun muss ich schauen wie ich die Werte aus den ArrayLists in das Label und in die ChoiceBox kriege.

Danke für den kleinen Denkanstoß !
 

Dainka

Mitglied
Das klingt beim ersten Lesen falsch, magst du die beiden Klassen mal zeigen?

Hier meine Fragen Klasse
Java:
package spiel;

import javafx.scene.control.Label;

import java.util.ArrayList;


public class Fragen {

    public static ArrayList<String> fragen = new ArrayList<>();

    public static void Fragen(Label fr){

        fragen.add("Na du");

        fragen.add(1,"");
        fragen.add(2,"g");
        fragen.add(3,"g");
        fragen.add(4,"g");

        fragen.add(5,"g");
        fragen.add(6,"");
        fragen.add(7,"g");
        fragen.add(8,"g");

        fragen.add(9,"g");
        fragen.add(10,"g");
        fragen.add(11,"");
        fragen.add(12,"g");

        fragen.add(13,"g");
        fragen.add(14,"g");
        fragen.add(15,"g");
        fragen.add(16,"");

    }

}


Hier meine Antwort Klasse

Java:
package spiel;

import java.util.ArrayList;

public class Antworten {

    static ArrayList<String> antworten = new ArrayList<>();

            antworten.add("Hallo");

            antworten.add(1,"g");
            antworten.add(2,"g");
            antworten.add(3,"g");
            antworten.add(4,"g");

            antworten.add(5,"g");
            antworten.add(6,"g");
            antworten.add(7,"g");
            antworten.add(8,"g");

            antworten.add(9,"g");
            antworten.add(10,"g");
            antworten.add(11,"");
            antworten.add(12,"g");

            antworten.add(13,"g");
            antworten.add(14,"g");
            antworten.add(15,"g");
            antworten.add(16,"g");

        }

    }


Und zu guter letzt meine KartenController Klasse


Java:
package spiel;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.application.Application;
import javafx.beans.Observable;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.Tooltip;
import javafx.stage.Stage;

import java.util.ArrayList;
import java.util.Set;

public class KarteController implements Initializable {

    @FXML
    public ResourceBundle resources;

    @FXML
    public URL location;

    @FXML
    private Label frage;

    @FXML
    private Button weiter;

    @FXML
    private ChoiceBox<String> antwort;

    public int rundenAnzahl=0;

    public static int semster;



    @FXML
    void onWeiterAction(ActionEvent event) {

      
    public void setAntwort(ChoiceBox<?> antwort) {


        //this.antwort = antwort;
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
    
            frage.setText();
            Antworten.getItems().addAll();
    }
}

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

    }
}

und hier die FXML zur Karte


XML:
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>


<fx:root prefHeight="400.0" prefWidth="600.0" type="AnchorPane" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="spiel.KarteController">
   <children>
      <Button fx:id="weiter" layoutX="508.0" layoutY="347.0" mnemonicParsing="false" onAction="#onWeiterAction" text="Button" />
      <Label fx:id="frage" layoutX="11.0" layoutY="72.0" prefHeight="118.0" prefWidth="579.0" text="Label" />
      <ChoiceBox fx:id="antwort" layoutX="10.0" layoutY="200.0" prefHeight="39.0" prefWidth="579.0" />
   </children>
</fx:root>
 

Dainka

Mitglied
Das klingt beim ersten Lesen falsch, magst du die beiden Klassen mal zeigen?

Ich habe echt Probleme beim Umdenken und initizalisieren des Label und der ChoicBox, ich weiß nicht genau wie das anstellen kann das er den Text aus den ArrayLists nimmt und als String in Label und ChoiceBox zurückgibt... :( da fehlen mir echt die erfahrungen im Umgang mit FXML.
 

Robat

Top Contributor
Du solltest dich generell erstmal mit den Grundlagen von Java beschäftigen.
static Variablen sind am Anfang ein NoGo und brauchst du in 99% der Fälle auch nicht.
Du deklarierst momentan Methoden in anderen Methoden - da sollte deine IDE eigentlich explodieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
berserkerdq2 Jemand einen Tipp wie man ein Javafx-Hintergrund "dynamisch" macht Allgemeine Java-Themen 3
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
berserkerdq2 Frage zu IntelliJ und JavaFX Allgemeine Java-Themen 1
thor_norsk Eclipse - Fehlermeldung - JavaFX Allgemeine Java-Themen 24
volcanos JavaFX-Programme nur in NetBeans selber ausführbar ! command_line: NoClassDefFoundError Allgemeine Java-Themen 39
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
C Java11+ JavaFX HtmlEditor ContextMenu neue MenuItems hinzufügen Allgemeine Java-Themen 5
G JavaFX var Ausdruck Allgemeine Java-Themen 1
G javafx "class path" exception Allgemeine Java-Themen 5
K Anzeigemöglichkeit von Bildern in JavaFX mit Hilfe von MongoDB GridFS Allgemeine Java-Themen 0
M JavaFX Allgemeine Java-Themen 13
P JavaFX Anwendung beendet sich selbst nur als Jar Allgemeine Java-Themen 40
L JavaFX JavaFX Chart in Apache Poi Excel Datei Allgemeine Java-Themen 2
A Zusammenspiel javafx Fenster Allgemeine Java-Themen 1
H Internationalisierung I18n in JavaFx? Allgemeine Java-Themen 7
Tarrew JavaFX: K-NN Decision Boundary plotten (Mesh-Grid, Polylines, ... ?? ) Allgemeine Java-Themen 1
D Compiler-Fehler JavaFX - Bekomme Fehlermeldungen nicht weg Allgemeine Java-Themen 31
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M List -Tableview-Javafx-Vererbung Allgemeine Java-Themen 35
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
U JAVAFX Simulation Allgemeine Java-Themen 1
M javafx ComboBox- Nullpointer Exception Allgemeine Java-Themen 6
L Eclipse JavaFX Klasse starten programmatisch Allgemeine Java-Themen 1
Sam96 JavaFX Benutzerrechte Allgemeine Java-Themen 6
J javaFX mySQL Allgemeine Java-Themen 3
P JavaFX HTMLEditor Menü Allgemeine Java-Themen 0
L JavaFX JavafX externe FXML laden? Allgemeine Java-Themen 4
S JavaSE, JavaEE oder JavaFX? Allgemeine Java-Themen 5
N WaitForScript- methode in javafx Allgemeine Java-Themen 1
I Javafx Open/Read und Tree Funktion Allgemeine Java-Themen 14
M Regex für Zahleneingabe in JavaFX Textfield Allgemeine Java-Themen 18
B JavaFX fxml, die selbe Instanz der Klasse Allgemeine Java-Themen 4
M JavaFX-Gegenstück zu Swing-Button-DoClick-Methode Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben