1

GWT のコレクションにオブジェクトを追加するメソッドを呼び出すと、null ポインター エラーが発生します。私が行ったことはすべて非常に単純なオブジェクトを作成するため、理由はわかりません(文字列のみを含む)。関数と関数を呼び出すコードは次のとおりです。

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;
    }

}

最初のプラント、次の行を追加しようとすると、エラー (null ポインター) が発生します。

PlantData plant1 = new PlantData("ハーブ");

どんな助けでも感謝します:)

4

2 に答える 2

5

コレクションを初期化していません。それにもかかわらず、あなたはすでにその線にはないと言いましたが、私はそれを疑っています. ただし、完全な例外スタックを表示すると、はるかに役立ちます。PlantData コンストラクターで例外が発生する可能性がありますが、ここでは示していません。

あなたはこのようなことをすることができます、

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

通常はArrayListを使用するため、ArrayListを使用しました。要件に応じて、他の実装も使用できます。

于 2009-02-25T03:29:26.550 に答える
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(...)を使用してウィジェットとして垂直パネルを使用する必要があります。

于 2009-02-25T05:48:53.483 に答える