2

時々 NullPointerException をスローするコードがあります。これまでのところ、あまり面白くありません。しかし、オブジェクトを参照しない行で例外が発生します。

    try
    {
      parser.parse(input);/*line 186*/ 
    }
    catch(Exception e)
    {
      //NPE happens in the next line?
      throw new SAXException("Error parsing document", e);/*line 190*/
    }

ここでスタックトレース

  java.lang.NullPointerException
    at com.tejoe.MyXMLParser.parse(MyXMLParser.java:190)
    at com.tejoe.MyXMLParser.parse(MyXMLParser.java:168)
    ....

過去 3 か月間に発生したのは 2 回だけで、コードは少なくとも 10 万回実行されました。

行情報が正しいことを確認するために、すでにコードを逆コンパイルしました。

追加テスト

SAXException には何か特別なものがあるようです。次のテストを行いました。

import org.xml.sax.SAXException;

public class Test
{
  public static void main(String[] args) throws Exception
  {
    new SAXException("Error", new NullPointerException()).printStackTrace();
  }
}

次の出力を得ました

java.lang.NullPointerException
  at Test.main(Test.java:7)
Caused by: java.lang.NullPointerException
  ... 1 more

解決策: SAXException は toString メソッドをオーバーライドして、原因となる例外の名前を返します。

本番環境(AIX JAVA)で出力が原因で発生しなかったことだけが不思議です

4

3 に答える 3

1

前回のリリース以降、コードが変更されている必要があります。行番号はコンパイル時のコードに基づいているため、これにより行番号が台無しになります。

リリース以降、そのファイルから一部のコードを削除したようです。つまり、行番号が本来よりも大きくなっています。

于 2013-05-15T11:53:20.027 に答える
1

以下のコードを書き、ヌルポインタ例外を発生させました。次のように45行目に来ました、

Exception in thread "main" java.lang.NullPointerException
    at inheritance.parent.Child.main(Child.java:45)

import org.xml.sax.SAXException;

public class Child  {

public static void main(String[] args) throws SAXException {

        try{
        Child c1 = null;
        c1.i=0;

        } catch(Exception e){
            throw new SAXException("Error", e); //Line : 45
        }
    }
}

コードのエラーは適切です。null を取得しているオブジェクトを見つける必要があります。

于 2013-05-15T12:09:48.887 に答える
0

Replace your line :

throw new SAXException("Error parsing document", e);

with

e.printStackTrace();

you will find the right error line.

于 2013-05-15T12:14:17.747 に答える