2009-02-25 74 views
1

當調用,增加了一個對象在GWT的集合的方法,我得到一個空指針錯誤。我不知道爲什麼我所做的一切都創建了一個非常簡單的對象(只包含一個字符串)。這裏是調用函​​數和函數的代碼:泛型和集合在GWT,空指針

public class PlantMenu extends VerticalPanel { 

    private Collection<PlantData> plantList; 
    private Collection<PlantData> newPlantData; 

    public PlantMenu() { 
     createPlants(); 
     /* 
     for(Iterator<PlantData> i = plantList.iterator(); i.hasNext();) { 
      Window.alert(i.next().getPlantName()); 
     }*/ 
    } 

    public Collection<PlantData> createPlants() { 
     PlantData plant1 = new PlantData("Herbs"); 
     PlantData plant2 = new PlantData("Flowers"); 
     PlantData plant3 = new PlantData("Vegetable"); 

     newPlantData.add(plant1); 
     newPlantData.add(plant2); 
     newPlantData.add(plant3); 
     return newPlantData; 
    } 

} 

它的錯誤了(空指針)嘗試添加的第一家工廠時,這條線:

PlantData plant1 =新PlantData(「百草」 );

任何幫助讚賞:)

+0

如果醋的答案不正確,那麼你沒有給我們足夠的信息來幫助你。如果他的回答沒有幫助,那麼你需要給我們堆棧轉儲和更多信息。 – Eddie 2009-02-25 03:35:37

+0

似乎在PlantData構造函數中存在問題。 – Clint 2009-02-25 03:55:38

回答

5

您沒有初始化您的收藏。儘管如此,你已經告訴它它不在那條線上,但我懷疑它。顯示完整的異常堆棧會更有幫助。並且您的PlantData構造函數中可能會出現異常,但您並未在此處顯示它。

你可以做這樣的事情,

private Collection<PlantData> plantList = new ArrayList<PlantData>(); 
private Collection<PlantData> newPlantData = new ArrayList<PlantData>(); 

我已經使用ArrayList的,因爲通常我們使用ArrayList。根據要求,也可以使用其他實施方式。

0

您沒有正確初始化的變量,這有沒有關係GWT和僅僅是基本的Java。這裏有一個工作版本:

public class PlantMenu extends VerticalPanel { 

    private List<PlantData> plantList = new ArrayList<PlantData>(); 
    private List<PlantData> newPlantData = new ArrayList<PlantData>(); 

    public PlantMenu() { 
     createPlants(); 
     for(PlantData plant : newPlantData) { 
       Window.alert(plant.getPlantName()); 
     } 
    } 

    public List<PlantData> createPlants() { 
     newPlantData.add(new PlantData("Herbs")); 
     newPlantData.add(new PlantData("Flowers")); 
     newPlantData.add(new PlantData("Vegetable")); 
     return newPlantData; 
    } 

} 

作爲一個側面說明,你不應該延長VerticalPanel,而是擴展複合,然後使用垂直面板使用setWidget(...)你的部件;