1

というクラスがInfoあり、そのメソッドloadには次のコードが含まれています。

Circuito[] circuito=new Circuito[19];
for(int i=0;i<circuito.length;i++)
   circuito[i] = new Circuito(nome,immPath,sfondoPath,previsioni,giri,tempoGiro,carico);

すべてのパラメーターを正しく渡します (動作するかどうかを確認するために toString() メソッドを出力しました)。次に、別のクラスNewに次のコードがあります。

Info info=new Info();
info.load();
System.out.println(info.getCircuito()[0].toString());

(クラスには、配列全体を返すInfoメソッドが含まれています)。getCircuito

次に、次のエラーが表示されます。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at New.<init>(New.java:21)

ライン21はSystem.out.printラインです。

どれが問題なのかわかりません...助けてくれてありがとう!

4

2 に答える 2

2

ライン内の NPE の可能性は 3 つだけ

System.out.println(info.getCircuito()[0].toString());

それは:

  • 情報はnull。前に呼び出しに成功したため、できませんinfo.load()
  • getCircuito()戻りますnull
  • getCircuito()[0]ですnull

それでおしまい。したがって、load()表示されたコードの場合、おそらくgetCircuito()返されnullます。

編集:理由が見つかりました。あなたが呼んでいます

Circuito[] circuito=new Circuito[19];

あなたのload()方法で。したがって、新しい配列をクラス変数ではなく、load()メソッドの後に再び移動するローカルスコープ内の新しい変数に割り当てています。上記の行を次のように変更します

circuito=new Circuito[19];

そしてあなたは大丈夫なはずです。

于 2013-05-04T18:20:05.997 に答える
0

間違いなく、何らかの理由で配列を埋めていません。ループのような非常に狭いスコープ内で classのCircuitoクラス インスタンスを 定義した可能性があります。Info

Info クラス内の別のインデックスを呼び出してみてください。それが機能する場合、問題はインデックス 0 にあります。

配列全体を取得して印刷してみてください。配列全体がNULLになると思います。

最後に、不要な場所で static キーワードを使用していないかどうかを確認します。

于 2013-05-04T20:19:24.293 に答える