簡體   English   中英

我怎么知道Null指針異常的起源?

[英]How can I know where a Null Pointer Exception originated?

我在制作Blackberry應用時遇到了問題。 我找到了一個人,他做了一個教程,做了我嘗試過的事情。 我復制了教程應用程序的代碼,試圖重新創建它,只是為了看它的實際效果。 結果:空指針異常。

我想知道是什么觸發了這一點。 我怎么能夠?

如果捕獲Throwable而不是捕獲Exception或Exception的任何子類,則可以查看stacktrace。 例如

try
{
   //some code
}
catch(Throwable t)
{
    //Will automatically show a stacktrace in eclipse.  
    //I believe on a real device it will put the stacktrace in the eventlog.  
}

BlackBerry中沒有堆棧跟蹤,最好是使用Debug模式,因此應用程序將在異常發生時break

人們建議這樣做

try {
    // Code that throws an exception
} catch (Exception e) {
    e.printStackTrace();
}

哪個不適用於BlackBerry,您需要使用它

System.out.println(e.getMessage());

但由於它只顯示異常,它不會給你發生錯誤的行,你將不得不在println添加其他信息。

在真實設備上,您可以通過執行以下操作訪問StackTrace:

轉到主屏幕並鍵入后門序列LGLG。 然后,您可以篩選日志並找到異常條目。 然后,您可以通過電子郵件復制並發送跟蹤。

我在RIM網站上找到的最好的就是這份文件

好吧,我不能相信這個,但這個線程似乎給出了答案。

更改catch塊以捕獲Throwable而不是特定的Exception。 這將保留堆棧跟蹤並將其添加到事件日志中。

http://supportforums.blackberry.com/t5/Java-Development/How-to-get-stacktrace-from-a-real-device/mp/27668

此外,嘗試在黑莓智能手機模擬器上運行您的應用程序而不是您的真實手機,因為黑莓在他們的文檔中指出您可以調用printStackTrace功能。

在黑莓中發現NPE創始人很容易。 例如

1.將此代碼插入任何地方。

String temp = null; temp.length();

  1. 從eclipse啟動調試模式的模擬器。
  2. 當你到達這個代碼時,eclipse會自動暫停執行代碼和temp.length(); 此行將突出顯示為綠色。
  3. 在調試窗口中,您可以看到掛起的異常空指針異常。

我不知道黑莓,但通常情況下,例外有一個堆棧跟蹤,其中顯示行號:

java.lang.NullPointerException
    at your.packege.ClassName.methodName(ClassName.java:169)

所以獲取堆棧跟蹤並查看。 堆棧跟蹤可以通過獲得

try {..} catch (Exception ex) {..}

或者讓它冒泡到一個打印到標准輸出的地方。

此外,每個異常都有getStackTrace()方法,它將堆棧跟蹤的每一行作為StackTraceElement

您應該能夠查看異常的堆棧跟蹤。

您可以將其打印到控制台,執行以下操作:

try {
    // Code that throws an exception
} catch (Exception e) {
    e.printStackTrace();
}

注意:這絕不會出現在生產代碼中!

程序崩潰時查看堆棧跟蹤 它將告訴您發生異常的位置(通常是代碼行,如果可用的話)以及哪個對象為null。

如果您沒有看到堆棧跟蹤,請使用OMG Unicorns建議的內容包圍主方法中的所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM