@FXML注入中的空指针异常

时间:2016-09-17 00:11:47

标签: java intellij-idea javafx-2 fxml

我尝试使用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为null

这是错误: IntelliJ error

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

让你的FXML控制器实现Initializable。然后,系统将提示您实施方法initialize(URL url, ResourceBundle resourceBundle)。在此方法中,您可以确保menubar_mainmenu已初始化。您可以将现有代码移动到该方法中。

public void initialize(URL url, ResourceBundle resourceBundle){
    menubar_mainmenu.getMenus().add(new Menu("File"));
}