2013-05-15 28 views
2

我有一段代碼,即有時會拋出的NullPointerException。到目前爲止並不真正有趣。但是異常發生在一行中,並沒有引用任何對象。的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) 
    .... 

它只會發生在兩次過去三個月和代碼運行至少十萬次。

我已經反編譯我的代碼,以確保在線信息是正確的,是的,他們是。

附加試驗

似乎與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)輸出

+0

parser.parse(輸入); 解析器是否爲空? 是否輸入爲空? – madhairsilence

+2

您確定要顯示的代碼來自文件FwXMLParser.java,而不是您使用此類的位置? –

+0

我不相信反編譯將被證明與問候什麼行號,除非它保留空白(我懷疑)。 –

回答

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 
     } 
    } 
} 

您的代碼的錯誤是正確的。你需要找到你得到空的對象。

+0

因此,更改e.printStackTrace()的throw將顯示正確的行錯誤 –

+0

我認爲這是解決方案。 SAXException似乎有些特殊之處。我在Line(c1.i = 0;)中由於NullPointerException引起了第45行中的NullPointerException,當我用其他異常替換SAXException時。另一個例外與NPE一起引發。只需將SAXException替換爲RuntimeException,即可獲得它。我認爲,在我的代碼中,解析方法中的某些內容失敗。 – tejoe

1

您的代碼必須改變,因爲你做了最後一個版本。這會弄亂行號,因爲它們是在編譯時基於代碼的。

它看起來像您解除了自發布該文件的一些代碼,這意味着該行號大於他們應該。

+0

我有同樣的想法,所以我已經檢查過。不,它沒有改變。該代碼自2005年以來一直保持不變。我還認爲有人可能會使用修改的uncommit源構建發行版,這就是爲什麼我反編譯發佈的發行版的原因。 – tejoe

+1

@tejoe你一定是錯了,我很害怕。這些東西不是騙人的!或者您正在查看錯誤的文件,如[在評論中提示](http://stackoverflow.com/questions/16564290/nullpointerexception-without-referencing-any-object/16564324#comment23798472_16564290)。 –

+0

SAXException確實存在,因爲toString()的實現採用了它自己的原因的名稱。 190號線沒有NPE。 – tejoe

0

替換您行:

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

e.printStackTrace(); 

,你會找到合適的錯誤行。