web-dev-qa-db-ja.com

ルートが設定されていませんJava 8Eclipseでエラーが発生しました

最近、JavaFXアプリケーション用にJava 8ビルド124をインストールしましたが、次のエラーが発生し始めました。

javafx.fxml.LoadException: Root hasn't been set. Use method setRoot() before load.
/Users/jonathan/Projects/Dominion/target/classes/dominion/application/controller/main_overview_tab.fxml:13

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.Java:2613)
at javafx.fxml.FXMLLoader.access$100(FXMLLoader.Java:104)
at javafx.fxml.FXMLLoader$RootElement.constructValue(FXMLLoader.Java:1320)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.Java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.Java:2723)
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 dominion.application.controller.MainOverviewTab.initView(MainOverviewTab.Java:64)
at dominion.application.controller.MainOverviewTab.initializeController(MainOverviewTab.Java:55)
at dominion.application.controller.GameSetupController.<init>(GameSetupController.Java:37)
at dominion.application.controller.DashboardController.<init>(DashboardController.Java:40)
at dominion.application.controller.MainController.<init>(MainController.Java:37)
at dominion.application.Dominion.start(Dominion.Java:18)
at com.Sun.javafx.application.LauncherImpl$8.run(LauncherImpl.Java:837)
at com.Sun.javafx.application.PlatformImpl$7.run(PlatformImpl.Java:335)
at com.Sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.Java:301)
at com.Sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.Java:298)
at Java.security.AccessController.doPrivileged(Native Method)
at com.Sun.javafx.application.PlatformImpl$6.run(PlatformImpl.Java:298)
at com.Sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.Java:95)

javafx.fxml.LoadException: Root hasn't been set. Use method setRoot() before load.
/Users/jonathan/Projects/Dominion/target/classes/dominion/application/controller/players_tab.fxml:13

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.Java:2613)
at javafx.fxml.FXMLLoader.access$100(FXMLLoader.Java:104)
at javafx.fxml.FXMLLoader$RootElement.constructValue(FXMLLoader.Java:1320)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.Java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.Java:2723)
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 dominion.application.controller.PlayersTab.initView(PlayersTab.Java:46)

私のアプリケーションはJava 7ビルド40および51では問題なく動作しますが、Java 8ビルド124では動作しません。main_overview_tab.fxmlの最初の数行は次のとおりです。ファイル:

<fx:root type="javafx.scene.layout.AnchorPane" id="AnchorPane" fx:id="content" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-1.0" minWidth="-1.0" prefHeight="600.0" prefWidth="1000.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
<children>
<VBox prefHeight="-1.0" prefWidth="-1.0" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10.0">
  <children>
    <HBox prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS">
      <children>
        <VBox id="playersVBox" prefHeight="-1.0" prefWidth="-1.0" spacing="40.0" HBox.hgrow="ALWAYS">
          <children>
            <Label text="Players">
              <font>
                <Font size="18.0" fx:id="x3" />
              </font>
              <VBox.margin>
                <Insets />
              </VBox.margin>
            </Label>

この質問は非常に似ていますが、私の状況には役立たなかったようです: JavaFX SceneBuilder 2.0は、メインレイアウトタグとしてfx:rootを持つカスタムコンポーネントのFXMLを開きません

[〜#〜]編集[〜#〜]:FXMLをロードするコード

public class MainOverviewTab extends Tab implements IObserver {
  @FXML public AnchorPane content;

  private SingleGameSettings gameSettings;
  private List<ImageView> overviewImages;

  public MainOverviewTab() {
  }

  public void initializeController(SingleGameSettings gameSettings) {
      this.gameSettings = gameSettings;
      this.gameSettings.registerObserver(this);

      initView();
  }

  private void initView() {
      FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("main_overview_tab.fxml"));
      fxmlLoader.setRoot(content);
      fxmlLoader.setController(this);

      try {
          fxmlLoader.load();
      }
      catch (Exception e) {
          e.printStackTrace();
      }

      this.setText("Overview Game");
      this.setContent(content);

  }
  ...
18
j will

scene Builder-> Document-> Controllerからfx:rootコンストラクトのチェックを外すか、fxmlファイルのコードから削除します

fx:root contruct

21
SimplyMe