如何获得 Java 中的错误原因?

How can I get error cause in Java?

我正在尝试 elasticsearch Java API。我得到了这个错误:

java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:113)
at org.elasticsearch.node.internal.InternalSettingsPreparer.randomNodeName(InternalSettingsPreparer.java:198)
at org.elasticsearch.node.internal.InternalSettingsPreparer.finalizeSettings(InternalSettingsPreparer.java:177)
at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareSettings(InternalSettingsPreparer.java:64)
at org.elasticsearch.client.transport.TransportClient$Builder.build(TransportClient.java:119)
at TryElastic.main(TryElastic.java:64)

那么,如何才能得到错误原因呢?它只是说这是一个空指针错误。我唯一可以打开和编辑的文件是我的文件 "TryElastic.java"。我想知道 java.io.Reader 错误的原因。我需要你的建议,谢谢...

如果查看可能导致 NPE 的方法的来源

https://github.com/elastic/elasticsearch/blob/master/core/src/main/java/org/elasticsearch/node/internal/InternalSettingsPreparer.java#L172

您看到它正在尝试加载资源 /config/names.txt,这显然 returns 为 null 并在 Reader 构造函数中触发 NPE。 (由于使用的版本不同,Stracktrace 行号不完全匹配)。 不幸的是,Elastic 不会检查资源流 - 它确实应该引发一个带有更好错误消息的异常。

因此,要解决该问题,您应该检查该资源在您的安装中是否可用。