2013-11-28 152 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