Java中没有StackTrace的NullPointerException

440

我们的Java代码遇到了NullPointerException的情况,但是当我尝试记录StackTrace(实际上调用了Throwable.printStackTrace())时,我得到的仅仅是:

java.lang.NullPointerException

有其他人遇到过这个问题吗?我尝试谷歌搜索“java空指针空栈跟踪”,但没有找到类似的内容。


这是什么上下文?是否涉及多个线程?我在尝试获取SwingWorker中异常的堆栈跟踪时遇到了问题。 - Michael Myers
这里没有涉及到线程,只是普通的Java。 - Edward Shtern
1
@Bozho - 不是的 - 我还不确定如何重现空指针异常。 - Edward Shtern
1
相关:https://dev59.com/P3NA5IYBdhLWcg3wI6R4 - Joshua Goldberg
有关 -XX: -OmitStackTraceInFastThrow 的更多信息,请参见 https://dev59.com/eG445IYBdhLWcg3w3N6z。 - Vadzim
12个回答

1

你的问题还不够清楚,无法确定是你的代码调用了printStackTrace()还是由日志处理程序执行。

以下是可能发生的情况:

  • 使用的记录器/处理程序已配置为仅输出异常消息字符串,而不是完整的堆栈跟踪。

  • 你的应用程序(或某些第三方库)正在使用LOG.error(ex);记录异常,而不是例如log4j Logger方法的两个参数形式。

  • 消息来自于你认为的不同位置;例如,它实际上来自于某个第三方库方法,或者是早期尝试调试留下的一些随机内容。

  • 被记录的异常已经重载了一些方法以隐藏堆栈跟踪。如果是这种情况,异常将不是真正的NullPointerException,而是NPE的某个自定义子类型甚至是某个不相关的异常。

我认为最后一种可能性相当不可能,但人们至少考虑过这样做来“防止”反向工程。当然,这只会使诚实的开发人员的生活变得困难。


0
我已经解决了这个问题,在for循环中打印了stackTrace。
for (StackTraceElement st : e.getStackTrace()) {
   LOGGER.error(st.toString());
}

使用这个方法,它会打印出整个堆栈跟踪信息。使用其他方法无法获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接