无法将控制器链接到JavaFX FXML

我正在尝试将Controller连接到JavaFX Sheet,但出现很多错误。

    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:830)
Caused by: javafx.fxml.LoadException: 
/D:/Benutzer/Joel/Nextcloud/Hochschule/2.%20Semester/Software%20Entwicklung%202/Projekte/softwareprojektse2/target/classes/FXML-Files/Start.fxml:32

    at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2625)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2603)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
    at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
    at de.hdm_stuttgart.mi/de.hdm_stuttgart.mi.Main.start(Main.java:23)
    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:391)
    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
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private javafx.scene.control.TextField GUI.StartController.playernameText accessible: module de.hdm_stuttgart.mi does not "opens GUI" to module javafx.fxml
    at java.base/java.lang.reflect.accessibleObject.checkCanSetaccessible(accessibleObject.java:344)
    at java.base/java.lang.reflect.accessibleObject.checkCanSetaccessible(accessibleObject.java:284)
    at java.base/java.lang.reflect.Field.checkCanSetaccessible(Field.java:176)
    at java.base/java.lang.reflect.Field.setaccessible(Field.java:170)
    at javafx.fxml/javafx.fxml.FXMLLoader$Controlleraccessor.addaccessibleFields(FXMLLoader.java:3479)
    at javafx.fxml/javafx.fxml.FXMLLoader$Controlleraccessor$1.run(FXMLLoader.java:3444)
    at javafx.fxml/javafx.fxml.FXMLLoader$Controlleraccessor$1.run(FXMLLoader.java:3440)
    at java.base/java.security.accessController.doPrivileged(accessController.java:312)
    at javafx.fxml/javafx.fxml.FXMLLoader$Controlleraccessor.addaccessibleMembers(FXMLLoader.java:3439)
    at javafx.fxml/javafx.fxml.FXMLLoader$Controlleraccessor.getcontrollerFields(FXMLLoader.java:3378)
    at javafx.fxml/javafx.fxml.FXMLLoader.injectFields(FXMLLoader.java:1170)
    at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processValue(FXMLLoader.java:865)
    at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:759)
    at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
    ... 12 more
Exception running application de.hdm_stuttgart.mi.Main

我的FXML工作表:

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

<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<AnchorPane fx:controller="GUI.StartController" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label alignment="CENTER" layoutX="286.0" layoutY="46.0" text="Unikater" textFill="#0655c3eb" AnchorPane.leftAnchor="220.0" AnchorPane.rightAnchor="220.0" AnchorPane.topAnchor="60.0">
         <font>
            <Font name="Verdana Bold" size="30.0" />
         </font>
      </Label>
      <HBox layoutX="300.0" layoutY="20.0" prefHeight="250.0" prefWidth="450.0" AnchorPane.bottomAnchor="20.0" AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" AnchorPane.topAnchor="125.0">
         <children>
            <VBox prefHeight="255.0" prefWidth="250.0">
               <children>
                  <Label alignment="CENTER" prefHeight="18.0" prefWidth="240.0" text="Spielerliste">
                     <font>
                        <Font name="Verdana Bold" size="14.0" />
                     </font>
                     <VBox.margin>
                        <Insets bottom="10.0" />
                     </VBox.margin>
                  </Label>
                  <ListView fx:id="playerlistView" maxWidth="240.0" prefHeight="150.0" prefWidth="240.0">
                     <VBox.margin>
                        <Insets bottom="10.0" />
                     </VBox.margin>
                  </ListView>
                  <Button fx:id="editPlayerBtn" mnemonicParsing="false" prefHeight="25.0" prefWidth="240.0" text="Liste bearbeiten" />
               </children>
            </VBox>
            <VBox layoutX="10.0" layoutY="10.0" prefHeight="255.0" prefWidth="250.0">
               <children>
                  <Label alignment="CENTER" prefHeight="18.0" prefWidth="250.0" text="Spieler hinzufügen">
                     <font>
                        <Font name="Verdana Bold" size="14.0" />
                     </font>
                     <VBox.margin>
                        <Insets bottom="10.0" />
                     </VBox.margin>
                  </Label>
                  <Label alignment="CENTER" layoutX="10.0" layoutY="10.0" prefHeight="18.0" prefWidth="250.0" text="(mindestens 2 Spieler)">
                     <font>
                        <Font name="Verdana" size="12.0" />
                     </font>
                  </Label>
                  <TextField fx:id="playernameText" maxWidth="180.0" prefWidth="180.0" promptText="Spielernamen">
                     <VBox.margin>
                        <Insets left="35.0" right="35.0" top="25.0" />
                     </VBox.margin>
                  </TextField>
                  <Button fx:id="addPlayerBtn" maxHeight="180.0" mnemonicParsing="false" onaction="#createPlayer" prefWidth="180.0" text="Hinzufügen">
                     <VBox.margin>
                        <Insets left="35.0" right="35.0" top="10.0" />
                     </VBox.margin>
                  </Button>
                  <Button fx:id="startBtn" layoutX="45.0" layoutY="116.0" maxHeight="180.0" mnemonicParsing="false" onaction="#changeFXML" prefWidth="180.0" text="Weiter">
                     <VBox.margin>
                        <Insets left="35.0" right="35.0" top="57.0" />
                     </VBox.margin>
                  </Button>
               </children>
            </VBox>
         </children>
      </HBox>
   </children>
</AnchorPane>

我的控制器类:

package GUI;

import de.hdm_stuttgart.mi.Game;
import javafx.event.actionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import java.io.IOException;

public class StartController{

    Game game = new Game();

    @FXML
    private TextField playernameText;
    @FXML
    private Button addPlayerBtn;
    @FXML
    private Button startBtn;
    @FXML
    private Button editPlayerBtn;
    @FXML
    private ListView<String> playerlistView = new ListView<>();


    public void createPlayer() {
        game.createPlayer(playernameText.getText());
    }


    protected void changeFXML(actionEvent event) throws IOException {
        Scene gamemode = new Scene(FXMLLoader.load(getclass().getResource("/FXML-Files/GameModeSelection.fxml")));
        Stage window = (Stage) ((Node)event.getsource()).getScene().getWindow();
        window.setScene(gamemode);
        window.show();
    }

}

我的主要班级:

package de.hdm_stuttgart.mi;


import GUI.StartController;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Scanner;

public class Main extends Application {
    static Logger log = LogManager.getLogger(Main.class);


    @Override
    public void start(Stage primarystage) throws Exception {

        FXMLLoader fxmlLoader = new FXMLLoader(getclass().getResource("/FXML-Files/Start.fxml"));
        Parent root = fxmlLoader.load();
        Scene start = new Scene(root);


        primarystage.setTitle("UNiKATER");
        primarystage.setWidth(600);
        primarystage.setHeight(400);
        primarystage.setScene(start);
        primarystage.show();
    }

    public static void main(String[] args) {
        Game game = new Game();
        Scanner s = new Scanner(System.in);

        game.rearrangeGameCards();
        game.saveAllGameCards();
        launch(args);

我已经尝试在Main类中链接Controller,但它也不起作用。 我什至不知道该如何处理大量错误... 如果我删除了所有的fx:ID和FX:Controller,它会加载所有它应该的东西。 我正在使用Java 13。

Shuzhenabc123 回答:无法将控制器链接到JavaFX FXML

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2917327.html

大家都在问