-1

私は最近、私を悩ませている問題に遭遇しました。Point2D オブジェクトの位置を別の既存の Point2D オブジェクトに設定しています。既存のポイントを新しいポイントに割り当てると、Null Pointer Exception が発生します。これをよりよく説明するために、ここに私のコードと出力があります。出力は、この最初のポイントが初期化されており、見かけのヌル ポインターの前に値を持っていることを明確に示しています。なぜこれが起こっているのか誰にも分かりますか?

コード:

private Point2D position;

public Enemy(Map map, double speed) {
    if (Panel.waypoints.size() < 1) {
        Panel.waypoints.add(new Waypoint(0, 0));
    }
    System.out.println(Panel.waypoints.get(0).getPoint());
    position.setLocation(Panel.waypoints.get(0).getPoint());//this line throws the NPE
    System.out.println(position);
}

コンソール:

Point2D.Double[331.0, 284.0]
        Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at towerdefencev2.Enemy.<init>(Enemy.java:36)
    at towerdefencev2.Panel.mouseReleased(Panel.java:72)
    at java.awt.Component.processMouseEvent(Component.java:6505)

ありがとう、

ニック。

編集:

ウェイポイント クラス:

    int x, y;
Point2D point;

public Waypoint(int x, int y) {
    this.x = x;
    this.y = y;
    point = new Point2D.Double(x, y);
}
Point2D getPoint() {
    return point;
}
4

3 に答える 3

1

positionコンストラクターでフィールドを初期化してから印刷しようとしているようには見えません。したがって、例外がスローされます。

編集:

とはwaypoints? その内容によってはPanel.waypoints.get(0)、ウェイポイントからポイントが削除され、2 回目にアクセスしようとしたときに NPE が発生する可能性があります。

于 2013-11-02T02:50:01.600 に答える
0

NaNコードまたは出力のどこにも言及されていません。

あなたはNullPointerException理由positionを取得しています(あなたはそれを初期化したことはありnullません)。

于 2013-11-02T02:45:39.357 に答える