【发布时间】:2020-11-27 20:45:27
【问题描述】:
我的 java 代码中有一个奇怪的行为,我想请教一些建议。 在一个多线程应用程序中,我编写了以下代码:
scratchDir.resolve(directoryTree).toFile().mkdirs();
对于对象scratchDir 为空的错误,我期待日志上有堆栈跟踪,但没有任何关于错误的信息。
我检查了代码,但我从未尝试捕获 NullPointerException。
这里是完整的方法代码:
@Override
public void write(JsonObject jsonObject) throws FileSystemException {
Path directoryTree = getRelativePath();
scratchDir.resolve(directoryTree).toFile().mkdirs();
String newFileName = getHashFileName(jsonObject);
Path filePath = scratchDir.resolve(directoryTree).resolve(newFileName);
logger.debug("Write new file Json {} to persistent storage dir {}", newFileName, scratchDir);
File outputFile = filePath.toFile();
if (outputFile.exists()) {
throw new FileAlreadyExistsException(filePath.toString());
}
try (FileWriter fileWriter = new FileWriter(outputFile)) {
fileWriter.write(jsonObject.toString());
fileWriter.flush();
} catch (Exception e) {
logger.error(e);
}
}
为什么我的日志中没有异常?
【问题讨论】:
-
如果它不在您的日志中,那么您可能没有记录它。
NullPointerException会被这个方法抛出,所以接下来会发生什么取决于这个方法的调用者对异常做了什么。如果没有minimal reproducible example,我们真的无法为您提供帮助。 -
你自己说:“我已经检查了代码,但我从未尝试捕获 NullPointerException。”如果您希望记录和/或处理空指针,您应该尝试/抓住第 4 行引发异常的地方
-
好吧,这可能是Java中真正被误解的东西。 NullPointer 异常在到达邮件之前不会弹出,然后以任何方式发送到标准错误?
标签: java exception logging nullpointerexception