我怎么知道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。 这将保持堆栈跟踪并将其添加到事件日志中。
此外,尝试在黑莓智能手机模拟器而不是真正的手机上运行您的应用程序,因为黑莓在他们的文档中指出您可以调用printStackTrace函数。
在黑莓中发现NPE创始人很容易。 例如
1.将此代码插入任何地方。
String temp = null; temp.length();
- 从eclipse启动调试模式的模拟器。
- 当你到达这个代码时,eclipse会自动暂停执行代码和temp.length(); 此行将突出显示为绿色。
- 在调试窗口中,您可以看到挂起的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