将对象添加到TableView侦听器内部的ObservableList时发生NullPointerException

时间:2019-03-11 15:19:54

标签: java javafx nullpointerexception tableview observablelist

我想创建一个包含多个TableViews的GUI。我有一个TableView包含不同的菜肴,另一个TableView包含所选菜肴包含的成分。因此,我为菜TableView创建了一个侦听器,该侦听器将获取所选菜的食谱并将其显示在第二个TableView上。所述菜肴的食谱存储在Map<Ingredient, Number>内部,因此为了更轻松地支付TableView,我创建了一个名为Recipe的内部类。

这是Recipe类:

class Recipe {
    Ingredient ingredient;
    Number amount;
    public Recipe(Ingredient ingredient, Number amount){
        this.ingredient = ingredient;
        this.amount = amount;
    }
}

以下是食谱TableView的代码:

ingredientTableView = new TableView<>();
// Table columns for Ingredient Table
TableColumn<Recipe,Ingredient> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

TableColumn<Recipe,Number> unitColumn = new TableColumn<>("Amount");
unitColumn.setCellValueFactory(new PropertyValueFactory<>("amount"));

ingredientTableView.getColumns().addAll(nameColumn, unitColumn);

这是侦听器的代码:

dishTableView.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection) -> {
      Map<Ingredient,Number> recipe = newSelection.getRecipe();
      for(Map.Entry<Ingredient,Number> cursor: recipe.entrySet()){
            Recipe newRecipe = new Recipe(cursor.getKey(), cursor.getValue());
            recipeObservableList.add(newRecipe); //this is where I get the NPE
      }
      ingredientTableView.setItems(recipeObservableList);
});

因此,当我在dishTableView中选择任何菜肴时,都会遇到以下异常:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException

提前感谢您的帮助!

0 个答案:

没有答案