【问题标题】:Java class not reading fx:id from FXML file [duplicate]Java 类未从 FXML 文件中读取 fx:id [重复]
【发布时间】:2014-08-11 14:40:22
【问题描述】:

我正在制作 JavaFX 应用程序,但由于某种原因,我的控制器类无法识别 FXML 文件中的 FX id。

这是我的 FXML 代码:

//fxml code....
<AnchorPane id="Meta Data GUI" maxHeight="-1.0" maxWidth="-1.0" minHeight="-1.0" minWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="com.cisco.gaxl.metadatagui.windows.controllers.MainWindowController">
   //components....
   <Button fx:id="addTableButton" onAction="#testMethod" contentDisplay="CENTER" mnemonicParsing="false" prefWidth="-1.0" text="Add Table" textAlignment="CENTER" VBox.vgrow="NEVER">
   //more components...
</AnchorPane>

这是我的 Java 代码

import javafx.fxml.FXML
//more imports....
public class MainWindowController {
     //fields....
     @FXML private static addTableButton;

     @FXML void initialize() {
         //code...
         assert addTableButton != null : "fx:id=\"addTableButton\" was not injected: check your FXML file 'metadataEditor.fxml'.";
         //code....
         addTableButton.setOnAction(new EventHandler<ActionEvent>() {
             //code...
         }
     }

     @FXML private void testMethod() { System.out.println("Something"); }

}

我在addTableButton.setOnAction 声明中得到一个空指针异常,这很奇怪,因为它应该被我的断言语句捕获。我已验证我的类已正确定义为控制器类,并且我的 FXML 的所有其他部分都是正确的。

现在,如果我注释掉 setOnAction 声明(以及我的所有其他 JavaFX 组件),GUI 将正常输出,但没有任何操作。但是,单击 addTableButton 仍将执行 testMethod,正如我在 FXML 文件中定义的那样,因此看起来除了 fx:id 之外的所有内容都在工作。

有人知道这里发生了什么吗?我确定我在做一些非常愚蠢的事情,但感谢任何帮助!

【问题讨论】:

  • 这解决了我的问题。谢谢!

标签: java javafx fxml


【解决方案1】:

Javafx 似乎不接受静态变量,而且您也没有声明类型。这是您需要的:

@FXML
private Button addTableButton;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多