我有一段代码,有时会抛出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*/
}
这里是Stacktrace
java.lang.NullPointerException
at com.tejoe.MyXMLParser.parse(MyXMLParser.java:190)
at com.tejoe.MyXMLParser.parse(MyXMLParser.java:168)
....
在过去三个月中只发生过两次,代码至少运行了十万次。
我已经反编译了我的代码,以确保行信息是正确的,是的。
附加测试
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方法,返回原因Exception的名称。
现在我只是想知道,我没有得到生产环境中的输出(AIX JAVA)
答案 0 :(得分:1)
自上次发布以来,您的代码必须已更改。这会弄乱行号,因为它们是基于编译时的代码。
从发布以来,您似乎已从该文件中删除了一些代码,这意味着行号大于它们应该的大小。
答案 1 :(得分: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
}
}
}
您的代码错误是正确的。你需要找到你得到的对象。
答案 2 :(得分:0)
替换你的行:
throw new SAXException("Error parsing document", e);
与
e.printStackTrace();
你会找到正确的错误行。