2009-02-25 28 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(...)你的部件;