Исключение загрузчика fxml "корневое значение уже указано" Я никогда не определял корневое значение - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь, чтобы гиперссылка открыла новое окно.Я скопировал метод загрузчика fxml из других частей моего кода, которые работают без проблем.По какой-то причине я получаю проблему с исключением загрузчика fxml, которая говорит, что корневое значение уже указано.Я не указал корневое значение нигде в моем коде.Я также не указал контроллер в fxml, потому что другие ответы на stackoverflow сказали, что это может быть причиной проблемы.

это класс, который загружает новое окно.проблема возникает при попытке загрузить "/SellerProfileRegisterLayout.fxml"

public class SwitchToSellerProfile {

    @FXML private BorderPane borderPane = new BorderPane();
    @FXML private TextField usernameLogin = new TextField();
    @FXML private PasswordField passwordFieldLogin = new PasswordField();
    @FXML private MainController mainController;
    @FXML private Hyperlink sellerProfileRegisterHyperLink = new Hyperlink();

    public SwitchToSellerProfile(MainController mainController){
        this.mainController = mainController;
    }
    @FXML
    private void initialize(){
        sellerProfileRegisterHyperLink.setOnAction(e -> {
            try {
                FXMLLoader loader = new FXMLLoader(getClass().getResource("/SellerProfileRegisterLayout.fxml"));
                loader.setController(new SellerProfileRegisterController(this.mainController));
            this.mainController.getContentPane().getChildren().clear();
                this.mainController.getContentPane().getChildren().add(loader.load());
    // clicking the error always takes me here to the loader.load()
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        });
    }
}

fxml для SwitchToSellerProfile

<BorderPane prefHeight="400.0" prefWidth="550.0" 
            xmlns="http://javafx.com/javafx/8.0.172-ea" 
            xmlns:fx="http://javafx.com/fxml/1">
    <center>
      <Pane prefHeight="200.0" prefWidth="441.0" 
            BorderPane.alignment="CENTER">
        <children>
            <Label alignment="CENTER" contentDisplay="CENTER" 
                   layoutX="162.0" layoutY="71.0" prefHeight="46.0" prefWidth="228.0" 
                   text="Business Profile Sign In">
                <font>
                    <Font size="20.0" />
                </font>
            </Label>
            <TextField fx:id="usernameLogin" layoutX="192.0" layoutY="132.0" promptText="Business Username" />
            <PasswordField fx:id="passwordFieldLogin" layoutX="192.0" layoutY="167.0" promptText="Business Password" />
            <Hyperlink fx:id="forgotPasswordHyperlink" layoutX="218.0" layoutY="200.0" prefHeight="25.0" prefWidth="131.0" text="Forgot Password? " />
            <Label fx:id="incorrectLabel" alignment="CENTER_RIGHT" prefHeight="17.0" prefWidth="190.0" text="Wrong username or password" textFill="RED" visible="false" />
            <Button fx:id="btnLogin" layoutX="234.0" layoutY="235.0" mnemonicParsing="false" prefHeight="27.0" prefWidth="83.0" text="Sign In" />
            <Label layoutX="192.0" layoutY="274.0" text="Don't have one?">
               <font>
                  <Font size="12.0" />
               </font>
            </Label>
            <Hyperlink fx:id="sellerProfileRegisterHyperLink" layoutX="283.0" layoutY="271.0" text="Register here">
               <font>
                  <Font size="12.0" />
               </font>
            </Hyperlink>
        </children>
      </Pane>
   </center>
</BorderPane>

контроллера регистра и его fxml

public class SellerProfileRegisterController {

    private MainController mainController;
    @FXML
    private TextField textField = new TextField();
    @FXML private TextField businessEmail = new TextField();
    @FXML private Button registerBtn = new Button();
    @FXML private Hyperlink goBackLink = new Hyperlink();

    public SellerProfileRegisterController(MainController mainController){
        this.mainController = mainController;
    }
    @FXML private void initialize(){
        registerBtn.setText("Hello"); 
        // just to see if it works hint: it doesn't 
    }
}
<BorderPane prefHeight="400.0" prefWidth="600.0" 
            xmlns="http://javafx.com/javafx/8.0.172-ea" 
            xmlns:fx="http://javafx.com/fxml/1">
     <center>
      <Pane prefHeight="200.0" prefWidth="200.0" 
            BorderPane.alignment="CENTER">
          <children>
              <Label alignment="CENTER" contentDisplay="CENTER" 
                     layoutX="181.0" layoutY="62.0" prefHeight="46.0" prefWidth="225.0" 
                     text="Seller Profile Register">
                  <font>
                      <Font size="20.0" />
                  </font>
              </Label>
            <TextField fx:id="textField" layoutX="210.0" layoutY="121.0" promptText="Business Name" />
            <TextField fx:id="businessEmail" layoutX="210.0" layoutY="162.0" promptText="Business Email Address" />
            <Button layoutX="229.0" layoutY="278.0" mnemonicParsing="false" prefHeight="27.0" prefWidth="130.0" text="Register Account" fx:id="registerBtn" />
            <Hyperlink layoutX="210.0" layoutY="311.0" text="Go back? " fx:id="goBackLink">
               <font>
                  <Font size="10.0" />
               </font></Hyperlink>
            <PasswordField layoutX="210.0" layoutY="200.0" promptText="Password" />
            <PasswordField layoutX="211.0" layoutY="238.0" promptText="Confirm Password" />
          </children>
      </Pane>
     </center>
</BorderPane>

Сообщение об ошибке:

 javafx.fxml.LoadException: Root value already specified.
 user/IdeaProjects/FinalStore/target/classes/SellerProfileRegisterLayout.fxml
 user/IdeaProjects/FinalStore/target/classes/SellerProfileRegisterLayout.fxml

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2597)
at javafx.fxml.FXMLLoader.createElement(FXMLLoader.java:2755)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2704)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at Store.SwitchToSellerProfile.lambda$initialize$0(SwitchToSellerProfile.java:38)

строка 38 - это loader.load(), который я прокомментировал выше.

Так что в идеале SellerProfileRegisterController загружается вместо того, чтобы ничего не происходило, и выводит сообщение об ошибке на консоль.Я не уверен, что вызывает это.Спасибо!

...