我正在制作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
声明中得到一个nullpointer异常,这很奇怪,因为它应该被我的断言语句捕获。我已经验证我的类被正确定义为控制器类,并且我的FXML的所有其他部分都是正确的。
现在,如果我注释掉setOnAction
声明(以及我所有其他JavaFX组件),GUI将正常输出但不做任何操作。但是,单击addTableButton仍会执行testMethod
,因为我在我的FXML文件中定义它,所以看起来除了fx:id之外的所有东西都在工作。
有没有人知道这里发生了什么?我确定我做的事非常愚蠢,但感谢任何帮助!
答案 0 :(得分:0)
Javafx似乎不接受静态变量,你也没有声明一个类型。这就是你需要的东西:
@FXML private Button addTableButton;