0

昔、元同僚から彼のために働いていたコードを手に入れましたが、それを機能させることはできません。

デバッガーを使用して、私のクラスにはこのメソッドにブレークポイントがあると結論付けました:

((Map<String, List<byte[]>>)metaData).put(HEADERELEMENTS, headerOMElements); 

putメソッドには宣言があります - String key, List <byte[]> value。私も試してみました

((Map<String, List<byte]>>)metaData).put("HEADERELEMENTS",headerOMElements);

でも同じ状況です。私のprintStackTrace返品NullPointerException。のロギングを行いましたheaderElements

number of headerOMElements (headerOMElements.size();)=1
headers are(before calling the method PUT) (headerOMElements.toString();): [[B@d000d]

何が問題であるかを結論付け、それを解決する方法は? 私は高レベルの Java エキスパートではないので、本当に助けが必要です。

4

2 に答える 2

3

あなたが提供した限られた情報に基づいて、それが正確であると仮定すると、その時点で a を投げることができる唯一の可能な方法 1 はif isです。NullPointerExceptionmetaDatanull

そう ...

コードを変更して、NPE がスローされていると思われるステートメントのmetaData 直前の値を出力します。例えば

System.err.println("metaData is " + metaData);

出力が であることを示している場合metaDatanull次のステップは、コードを調べて、それが である理由を突き止めることですnull。初期化していないか、別の場所から渡してそこにあった可能性がnullあります。

出力がそれmetaDataが NOTnullであることを示している場合、質問で述べた事実/仮定のいずれかが間違っている必要があります。さらに診断するには、次のものが必要です。

  • コピーして貼り付けた実際のコード(タイプミスに基づいて、あなたが行ったように入力したのではありません)、および
  • 完全なスタックトレース。

1 - 一部の種類ではMap、キーがnull. ただし、その例外はメソッド callput()でスローされます。さらに、リテラル文字列をキーとして使用すると同じ問題が発生すると言われています。したがって、それは説明できません。他に考えられる唯一の説明は、複数のスレッドが同期せずにマップを更新しているということです。それは(ランダムに)NPEを与えられるかもしれませんが、NPEはインスタンスputの他のメソッドにあるでしょう。Map

于 2013-04-28T12:03:12.517 に答える
1

マップに入れたいデータが null でない場合、入れる前に、マップが null である可能性があり、NullPointerException が発生します。

または例外が他の場所でスローされます。

于 2013-04-28T10:57:44.670 に答える