0

Commons Digester で XML ファイルを解析していますが、コードの何が問題なのかわかりません。この java.lang.NullPointerException で立ち往生しています。

これはコードです: http://pastie.org/1708374

これは例外です: http://pastie.org/1708371

愚かなエラーだと思います

ありがとう

4

2 に答える 2

2

さて、これが問題です:

if (centroids.length == 0)

centroids私が見る限り、値を割り当てることは決してないので、常にnullになります。次に、上記の行で逆参照しようとすると、 がスローされNullPointerExceptionます。

コードの次の行で使用しようとした最初の行は、centroids[0]Java 配列を本当に理解していないことを示唆しています。Listおそらく、あなたは本当にいくつかの説明が欲しかったのですか?

また、常に同じ 5 つのキーを持つ の代わりに、タイトル、説明、タグ、時間、およびイベントのプロパティを持つタイプ (例: ) を作成することを強くお勧めします。次に、次を作成できます。Map<String, String>CentroidcentroidsList<Centroid>

List<Centroid> centroids = new ArrayList<Centroid>();

その後、データを取得すると...

Centroid centroid = new Centroid(...);
centroids.add(centroid);

ああ、あなたは現在==文字列の比較にも使用しています...そうしないでください: を使用してください。equalsそうしないと、文字列参照を比較することになります。

于 2011-03-24T14:46:59.530 に答える
1

NPE スタックトレースの読み取り方法に関する一般的な注意事項:

例外スタック トレースを取得したら、Caused by 行とその次の最初の行を確認します。

Caused by: java.lang.NullPointerException
  at CentroidGenerator.nextItem2(CentroidGenerator.java:31)

ほとんどの場合、null ポインター例外は、オブジェクトに対してメソッドを呼び出そうとしたときに、そのオブジェクトが null であるときに発生します。上記のエラー メッセージは、CentroidGenerator.java の 31 行目でエラーが発生していることを示しています。

if (centroids.length == 0) {

メソッドの呼び出しは object.method の形式であるため、このインスタンスでは null であるオブジェクトはセントロイドであることがわかります。

null を視覚的に判断する簡単な方法は、例外が発生した行のドットの左側にあるものを確認することです。複数のメソッド呼び出しがある行では、どのオブジェクトが null であるかがすぐにはわからないため、さらに調査が必要になる場合がありますが、この例ではそうではありません。

問題を解決するには、Jon の回答を参照してください。

于 2011-03-24T15:00:00.947 に答える