@FXML 注入中的空指针异常
Null pointer exception in @FXML Injection
我正在尝试使用 JavaFX 和 FXML 文件,但是当我在控制器中注入 MenuBar 时出现问题,编译器给我一个 NullPointerException。我尝试使用按钮和文本字段,它起作用了。
这是我的代码:
FXML 文件:`
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<VBox fx:controller="it.fedgiac.projectmanager.controller.ControllerMain" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<MenuBar fx:id="menubar_mainmenu" />
</children>
</VBox>`
这是我的控制器
public class ControllerMain {
@FXML
public MenuBar menubar_mainmenu;
public void generateView(Stage stage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("main_layout.fxml"));
Scene scene = new Scene(root);
stage.setTitle("Projects Manager");
menubar_mainmenu.getMenus().add(new Menu("File"));
stage.setScene(scene);
stage.show();
}
}
调试后发现变量menubar_mainmenu为空
这是错误:
提前感谢您的帮助。
使您的 FXML 控制器实现 Initializable
。然后系统将提示您实施方法 initialize(URL url, ResourceBundle resourceBundle)
。在此方法中,您可以确定 menubar_mainmenu
已初始化。您可以将现有代码移动到该方法中。
public void initialize(URL url, ResourceBundle resourceBundle){
menubar_mainmenu.getMenus().add(new Menu("File"));
}
我正在尝试使用 JavaFX 和 FXML 文件,但是当我在控制器中注入 MenuBar 时出现问题,编译器给我一个 NullPointerException。我尝试使用按钮和文本字段,它起作用了。
这是我的代码: FXML 文件:`
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<VBox fx:controller="it.fedgiac.projectmanager.controller.ControllerMain" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<MenuBar fx:id="menubar_mainmenu" />
</children>
</VBox>`
这是我的控制器
public class ControllerMain {
@FXML
public MenuBar menubar_mainmenu;
public void generateView(Stage stage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("main_layout.fxml"));
Scene scene = new Scene(root);
stage.setTitle("Projects Manager");
menubar_mainmenu.getMenus().add(new Menu("File"));
stage.setScene(scene);
stage.show();
}
}
调试后发现变量menubar_mainmenu为空
这是错误:
提前感谢您的帮助。
使您的 FXML 控制器实现 Initializable
。然后系统将提示您实施方法 initialize(URL url, ResourceBundle resourceBundle)
。在此方法中,您可以确定 menubar_mainmenu
已初始化。您可以将现有代码移动到该方法中。
public void initialize(URL url, ResourceBundle resourceBundle){
menubar_mainmenu.getMenus().add(new Menu("File"));
}