0

簡略化: 2 つのクラス。X と Y。

Y は X を拡張します。

XI コール:

    Y periodic;

次に、XI で Y の関数の 1 つを呼び出します。

periodic.conditionDepreciate();

Y の実際の機能ブロックは次のとおりです。

    public void conditionDepreciate() {
    ActionListener conditionDepreciation = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
              if (ameba.health > 0) {
                  ameba.health -= 1;
              }
        }
    };
        new Timer(conditionDelayCount * 1000, conditionDepreciation).start();
}

しかし、関数の機能に関係なく、X ファイルから次のようなエラーが表示されます。

X.main(X.java:245) で
X.(X.java:71)でスレッド "main" java.lang.NullPointerExceptionで例外が発生しました

71行目は、私が電話したときに言及しています:

periodic.conditionDepreciate();

誰かがエラーの説明を手伝ってくれますか?

編集:

X に Y のさまざまな関数を呼び出してもらいたいのですが、これらはすべて基本的に定期的なイベント タイマーです。

もともとタイマーは X クラス ファイルにありましたが、読みやすくするために独自のクラス ファイルに移動しました。

このようなものを初期化する必要があるかどうかわかりません... Y は X を拡張するので、X からすべての値を取得する必要がありますか? (おもう...)

上記のタイマー関数の 1 つを投稿しました。Y クラス ファイルに ameba.health とは何かを伝える必要がありますか? また ?関数とクラスを調べるだけでいいと思います >.>

4

2 に答える 2

5

periodic次のようにオブジェクトを作成しないため、参照に問題があるようです

Y periodic = new Y();
于 2012-05-12T17:56:27.597 に答える
2

おそらく の値periodicは null です。これは、静的/インスタンス フィールドのデフォルトです。それを介してメソッドを呼び出す前に、null 以外の参照を割り当てる必要があります。periodic の値がどうあるべきかについての十分な情報はありません-どこかに新しいインスタンスを作成する必要があるか、既存のインスタンスを使用する必要があるか-しかし、null 参照でメソッドを呼び出すとNullPointerException...

メソッドが呼び出されると予想されるインスタンスについて詳しく教えていただければ、さらにサポートできる可能性があります。

Y拡張するという事実は、Xここでは無関係であることに注意してください。

于 2012-05-12T17:55:33.077 に答える