2016-09-17 13 views
0

JavaFXとFXMLファイルで作業しようとしていますが、メニューバーをコントローラに挿入すると何かがうまくいかず、コンパイラから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>` 

そして、私は、変数menubar_mainmenuこれは誤りである

nullであることを見たデバッグした後、これは私のコントローラ

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(); 



    } 
} 

です: 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

まだ初期化されていない理由はまだ分かりませんが、動作します。どうもありがとうございます。 –

関連する問題