如何引用将对象添加到对象内的ArrayLists

时间:2013-11-28 01:46:35

标签: java arraylist

在JavaFX中,我正在创建一个运动跟踪系统。

我的对象用户有许多食物和许多练习,这些练习存储为ArrayLists。

public class User {

    private ArrayList<Food> listofFood = new ArrayList<Food>();
    private ArrayList<Exercise> listofExercise = new ArrayList<Exercise>();
    private String um;

    public User(String u) {
        this.um = u;
    }
    public void addNewFood(Food f) {
        listofFood.add(f);
    }
    public void addNewExercise(Exercise ex) {
        listofExercise.add(ex);
    }
}

食物和运动的结构相似。

public class Food {
    private String name;

    public Food(String n) {
        this.name = n;
    }
    public void setNameFood(String n) {
        this.name = n;
    }
}

在我的MainApp课程中,我创建了一个用户。

public class MainApp {
    public User UserLoggedIn;
}

我使用控制器传递了这个类的实例。

public class MainApp {
    MyController c = loader.getController();
    c.setDialogStage(dialogStage);
    c.setApp(this); 
}

在MyController类中,我设置了应用程序......

public class MyController { 
    public void setApp(MainApp app) {
        this.mainApp = app;
    }
}

...然后我在MyController中引用。

public class MyController { 
    mainApp.UserLoggedIn.addNewFood((new Food(nameField.getText())));
}         

这会产生空指针异常

1 个答案:

答案 0 :(得分:0)

UserLoggedIn永远不会被实例化,因此它将始终为null。为MainApp()创建一个默认构造函数,它只是创建User对象。然后创建一个名为getUser()的getter方法,该方法返回用户对象。另外,使用驼峰的情况是Java惯例。因此,UserLoggedIn应为userLoggedIn。

  public class MainApp 
  {
     private User userLoggedIn;

     public MainApp()
     {
         userLoggedIn = new User("john doe");
     }

     public User getUserLoggedIn()
     {
         return userLoggedIn;
     }
  }

  public class MyController 
  { 
    MainApp mainApp = new MainApp();
    mainApp.getUserLoggedIn().addNewFood(new Food(//enter datum here));
  }