1

Web で見つけたクラスを "エンティティ" の動的配列の int の動的配列に適合させようとしましたが、"NullPointerException" が発生しています。

例外を発生させるコードは次のとおりです。

public void initialize()
{
    buffer = new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB);
    Entities.put(Entities.getCurrentPos()+1, new Entity(100, 100, Color.green));
    Entities.put(Entities.getCurrentPos()+1, new Entity(400, 400, Color.blue));
}

DynArrayEntities クラスの関連部分:

...

private Entity[] data;  // An array to hold the data.
private int currentpos = 0;

...

public void put(int position, Entity value) {

    if (position >= data.length) {

        int newSize = 2 * data.length;
            if (position >= newSize)
                newSize = 2 * position;
        Entity[] newData = new Entity[newSize];
        System.arraycopy(data, 0, newData, 0, data.length);
        data = newData;
    }

    data[position] = value;
    currentpos++;

}

....

public int getCurrentPos() {
    return currentpos;
}

よろしくお願いします。

4

4 に答える 4

3
...

private Entity[] data= new Entity[0];  // Or some value > 0
...

それ以外の場合、データはメソッドで最初にアクセスしたときに null になります。

于 2010-02-15T23:53:59.800 に答える
2

あなたはやっている

position >= data.length

初期化する前にdata

于 2010-02-15T23:57:09.497 に答える
0

単なる学習演習としてこれを行っていますか? そうでない場合は、java.util.Vector任意の動的配列を提供する を使用してみませんObjectか?

于 2010-02-16T00:13:15.070 に答える
0

(エンティティはフィールドですか? その場合、エンティティと呼ぶ必要があります。http://java.sun.com/docs/codeconv/を参照してください)

NPE がスローされた回線を正確に指定する必要があります。initialize() メソッドの 2 行目にある場合、おそらく Entities フィールドは null です。put() メソッドにある場合は、おそらくデータ フィールドが null であるためです。

于 2010-02-15T23:58:09.097 に答える