2013-11-28 102 views
0

在JavaFX中,我创建了一个运动跟踪系统。如何将对象添加到对象内的ArrayList中

我的对象用户有很多食物和许多练习,这些都存储为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()))); 
}   

这给出了一个空指针异常

+3

那么......问题是什么? –

+0

如果您询问如何访问对象,您只需在用户类中为它写入agettter方法即可。 –

+0

@JonathanNewmuis它给出一个空指针异常[更新后的描述] –

回答

0

UserLoggedIn从不实例化,因此,它会永远为空。为仅创建User对象的MainApp()创建一个默认构造函数。然后创建一个名为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)); 
    } 
+0

解决了我的问题太棒了。 –

+0

很高兴我能帮忙! – JKoko