Throwable getCause返回null

yur*_*ris 4 java throwable

我抓到了一个Throwable错误.

catch (Throwable t){    
    System.out.println(t.getCause().getMessage());
}
Run Code Online (Sandbox Code Playgroud)

当我在一行上放置断点System.out.并将鼠标悬停在(Eclipse)t变量上时,Eclipse会向我显示原因:java.lang.NoClassDefFoundError: myclass

但是当我发布我正在null寻找的断点时t.getCause().

为什么会这样?我怎样才能得到原因字符串.

更新:

如果我抓住的话也会发生

catch (NoClassDefFoundError e){
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*oun 5

答案在文档中 -Throwable#getCause:

返回此throwable null的原因或者原因不存在或未知.(原因是导致抛出此抛掷物的抛掷物.)

所以当你这样做时:

t.getCause().getMessage()
Run Code Online (Sandbox Code Playgroud)

这就像写作:

null.getMessage()
Run Code Online (Sandbox Code Playgroud)

这当然是导致的NullPointerException.

你可以简单地做:

catch (NoClassDefFoundError e){
   System.out.println(e.getMessage);
}
Run Code Online (Sandbox Code Playgroud)