相关疑难解决方法(0)

Java中没有StackTrace的NullPointerException

我有我们的Java代码的实例捕获NullPointerException,但当我尝试记录StackTrace(基本上最终调用Throwable.printStackTrace())时,我得到的是:

java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

还有其他人遇到过这个吗?我试过谷歌搜索"java空指针空堆栈跟踪",但没有遇到这样的事情.

java nullpointerexception

308
推荐指数
6
解决办法
9万
查看次数

没有调试代理程序,NullPointerException堆栈跟踪不可用

我最近发现了一个导致NullPointerException的错误.使用标准的slf4j语句捕获并记录异常.以下简要代码:

for(Action action : actions.getActions()) {
    try {
        context = action.execute(context);
    } catch (Exception e) {
        logger.error("...", e);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,没什么特别的.但是,在我们拥有的所有异常日志记录语句中,只有这一个不打印堆栈跟踪.它打印的全部是消息(表示为"...")和异常类的名称(java.lang.NullPointerException).

由于异常上的堆栈跟踪是延迟加载的,我想可能存在某种指令重新排序问题,并决定在日志语句之前调用e.getStackTrace().这没有任何区别.

所以我决定在启用调试代理的情况下重新启动.但是,因为我甚至连接到这个过程,我注意到现在堆栈的痕迹正在打印.很明显,调试代理的存在导致一些额外的调试信息变得可用.

从那时起我就修复了异常的根本原因.但我想了解为什么没有调试器就无法使用堆栈跟踪.谁知道?

澄清:这不是日志记录问题.想象一下相同的try/catch子句,但在catch中,我打印的值为:

e.getStackTrace().length
Run Code Online (Sandbox Code Playgroud)

没有调试器,它打印'0',调试器打印一个正数(在这种情况下为9).

更多信息:这发生在JDK 1.6.0_13,64bit,amd64,linux 2.6.9上

java logging nullpointerexception stack-trace

58
推荐指数
2
解决办法
3万
查看次数

如何避免ArrayIndexOutOfBoundsException或IndexOutOfBoundsException?

如果你的问题是我java.lang.ArrayIndexOutOfBoundsException在我的代码中得到了一个,我不明白为什么会发生这种情况.它是什么意思,我该如何避免它?

这是关于这个主题的最全面的Canonical信息集合 java.lang.ArrayIndexOutOfBoundsException以及java.lang.IndexOutOfBoundsException.

有很多像这样的问题,所有这些都有模糊的没有代码答案,或者大多数都非常具体,并且局限于手头的问题,并没有解决在所有情况下完全相同的根本原因.


如果您看到属于此一般情况的一个,而不是使用更多重复的专门内容回答它,请将其标记为此副本的副本.

java arrays arraylist indexoutofboundsexception

-9
推荐指数
1
解决办法
4万
查看次数