2013-05-26 43 views
1

好吧,我無法使用菜單項製作菜單。MenuItem上的NullPointer加載控制器時

我按照這個教程(http://docs.oracle.com/javafx/2/ui_controls/menu_controls.htm),但是當我運行它時,我得到一個空指針錯誤。我的代碼如下所示:

@Override 
public void initialize(URL fxmlFileLocation, ResourceBundle resources) { 

    ventas.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent t) { 
      FXMLLoader ventasloader; 
      ventasloader = new FXMLLoader(getClass().getResource("VentasGUI.fxml")); 
      Stage ventasstage = new Stage(); 
      AnchorPane ventas = null; 
      try { 
       ventas = (AnchorPane) ventasloader.load(); 
      } catch (IOException ex) { 
       Logger.getLogger(PuntoDeVentaController.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      Scene ventasscene = new Scene(ventas); 
      ventasstage.setScene(ventasscene); 
      ventasstage.setTitle("Venta"); 

      VentasGUIController controller = ventasloader.<VentasGUIController>getController(); 
      controller.setUser(userID); 

      ventasstage.show(); 
     } 

...但即使當我離開只是骨架代碼,NetBeans將自動補充說:

@Override 
public void initialize(URL fxmlFileLocation, ResourceBundle resources) { 

    ventas.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent t) { 
      throw new UnsupportedOperationException("Not supported yet."); 
     } 

...而不是讓「不支持尚未」我得到nullpointerexception。我查看了http://docs.oracle.com/javafx/2/api/javafx/scene/control/MenuItem.html上的文檔,但我沒有看到我的事件處理程序是空的,它看起來與教程中的完全相同。

任何人都知道我在做什麼錯了?

謝謝!

回答

1

你沒有告訴在NPE發生,所以我想在這裏:

ventas.setOnAction(new EventHandler<ActionEvent>() { 

而且我想這ventas是你在.fxml文件中定義一個JavaFX控制。

有兩件事情需要做,.fxml文件和Java代碼工作之間的連接。

  1. 標註ventas與您的Java文件@FXML
  2. 定義ventas控制fx:id在SceneBuilder(將其設置爲ventas
+0

AARRGGgghhhh!我對控制器十分重視,忘記回去並將fxml文件中的「ventas」fx:id與實際的MenuItem關聯起來!謝謝! – John