我怎么知道Null指针exception的起源?

我在制作Blackberry应用程序时遇到了问题。 我找到了一个人,他做了一个教程,做了我尝试过的事情。 我复制了教程应用程序的代码,尝试重新创建它,只是为了看它的实际效果。 结果:空指针exception。

我想知道是什么触发了这一点。 我怎么能够?

如果捕获Throwable而不是捕获Exception或Exception的任何子类,则可以查看堆栈跟踪。 例如

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模式,因此应用程序将在exception发生时break

人们建议这样做

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

哪个不适用于BlackBerry,您需要使用它

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

但由于它只显示exception,它不会给你发生错误的行,你将不得不在println添加其他信息。

在真实设备上,您可以通过执行以下操作访问StackTrace:

转到主屏幕并键入后门序列LGLG。 然后,您可以筛选日志并找到exception条目。 然后,您可以通过电子邮件复制和发送跟踪。

我在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. 在调试窗口中,您可以看到挂起的exception空指针exception。

您应该能够查看exception的堆栈跟踪。

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

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

注意:这绝不会出现在生产代码中!

程序崩溃时查看堆栈跟踪 。 它将告诉您发生exception的位置(通常是代码行,如果可用的话)以及哪个对象为null。

如果您没有看到堆栈跟踪,请使用OMG Unicorns建议的内容包围主方法中的所有内容。

我不知道黑莓,但通常情况下,例外有一个堆栈跟踪,其中显示行号:

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

所以获取堆栈跟踪并查看。 堆栈跟踪可以通过获得

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

或者让它冒泡到一个打印到标准输出的地方。

此外,每个exception都有getStackTrace()方法,它将堆栈跟踪的每一行作为StackTraceElement