当前位置: 首页 > 知识库问答 >
问题:

JavaFX-无法从FXML文件加载节点[重复]

萧允晨
2023-03-14

由于某种原因,我无法将FXML文件中定义的节点加载到实例变量中。我制作了这两个测试文件:

public class Test extends Application {
    @FXML private TextArea ta;
    @FXML private Label l;

    public void start(Stage primaryStage) {
        Scene scene = null;
        try {scene = new Scene((BorderPane)FXMLLoader.load(Test.class.getResource("ChatServer.fxml")));}
        catch (IOException e) {}

        primaryStage.setScene(scene);
        primaryStage.setTitle("Chat Server");
        primaryStage.show();
        System.out.println(ta);
        System.out.println(l);
    }
}
<?xml version="1.0" encoding="UTF-8"?>

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

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Test">
   <top>
      <Label fx:id="l" text="text" BorderPane.alignment="CENTER">
         <BorderPane.margin>
            <Insets bottom="10.0" top="10.0" />
         </BorderPane.margin>
         <font>
            <Font size="13.0" />
         </font>
      </Label>
   </top>
   <center>
      <TextArea fx:id="ta" editable="false" focusTraversable="false" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
   </center>
</BorderPane>

textarealabel都被打印为null而它们本应被注入FXML文件中定义的节点,有人知道这里出了什么问题吗?当我在Scene Builder中编辑FXML文件时,controller类和字段都被找到并识别,所以应该不会有任何问题。

共有1个答案

路裕
2023-03-14

FXMLLoader.Load创建测试类的新实例。因此这将与您当前的类不相同。

使用FXMLLoader类的setControllerFactory方法更改此行为。

 类似资料:
  • 我正在尝试创建javafx applet,使用IntelliJ idea。构建之后,我得到了三个文件:.jar、.jnlp和.html。如果我启动jar所有工作都很好,但是如果我尝试使用jnlp或html运行app,它会抛出异常: 为什么会这样?Jar正好包含所需的位于指定路径的fxml。 Java: FXML: 我做错了什么?请帮帮忙。

  • 我在打开我的时遇到问题。当我运行项目时,一切都运行得很好,但是我不能在下进行修改。每次我想要添加到中时,我都需要删除包含,做我想做的,并手动将代码粘贴到中,而不是粘贴到中(不能在Tab下包含?)。

  • 我一直在做一个桌面应用程序,在那里我需要使用JavaFX。我在使用Scene Builder构建的eclipse上的JavaFX项目中创建了各种FXML文件。除了这个讨厌的文件(fxmlimglist.FXML)外,我加载任何FXML文件都没有问题。 其主要思想是,当按下一个按钮时,会出现一个新窗口。下面是该按钮的事件处理程序的代码: package explorer中的项目如下所示: https

  • 因此,在我尝试编写JavaFX教程和FXML示例时。但是,每当我在.fxml文件中向GridPane中添加一些内容时,程序就会崩溃。它打开一个普通的GridPane,如果没有其他东西放在其中。 } 究竟是什么原因导致它坠毁?

  • 我正在用JavaFX构建一个应用程序,并为布局加载FXML文件。开始时,我的所有.fxml文件都在java类路径中。 由于我正在制作一个游戏引擎,所以我决定将所有的东西都移到类路径之外,所以我现在有了一个文件系统,如下所示: 这就是我加载FXML的方式 它看起来可能并不漂亮,但它可以工作(system.getProperty(“jdir”)只是.jar在光盘上的位置)。Java查找每个文件(FXM