当调用一个将对象添加到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 = new PlantData(“Herbs”);
任何帮助表示赞赏:)
答案 0 :(得分:5)
您没有初始化您的收藏。尽管如此,你已经告诉它不在那条线上,但我对此表示怀疑。显示完整的异常堆栈会更有帮助。您的PlantData构造函数中可能会发生异常,但您没有在此处显示它。
你可以这样做,
private Collection<PlantData> plantList = new ArrayList<PlantData>();
private Collection<PlantData> newPlantData = new ArrayList<PlantData>();
我使用过ArrayList,因为我们通常使用ArrayList。根据要求,也可以使用其他实现。
答案 1 :(得分: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,而是扩展Composite,然后使用垂直面板作为您的小部件使用setWidget(...);