2016-09-17 176 views
0

我正在尝试使用JavaFX和FXML文件,但当我在控制器中注入MenuBar时,出现了一些问题,编译器给了我一个NullPointerException。我尝试使用按钮和文本框,它的工作原理。@FXML注入中的空指针异常

这是mycode的: 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为空

这是错误后: IntelliJ error

非常感谢您的帮助。

+0

您是否试过评论将菜单添加到menu_mainmenu的位置?如果错误仍然存​​在,那不是问题。 –

回答

2

使您的FXML控制器执行Initializable。然后系统会提示您执行方法initialize(URL url, ResourceBundle resourceBundle)。在这种方法中,您可以确定menubar_mainmenu已初始化。您可以将现有的代码移入该方法。

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

我还不明白为什么它没有初始化,但它的工作原理,非常感谢。 –