在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())));
}
这会产生空指针异常
答案 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));
}