Java 日志上没有NullPointerException

Java 日志上没有NullPointerException,java,exception,logging,nullpointerexception,Java,Exception,Logging,Nullpointerexception,我的java代码中有一个奇怪的行为,我想问一些建议。 在多线程应用程序中,我编写了以下代码: scratchDir.resolve(directoryTree.toFile().mkdirs(); 对于一个bug,ObjectscratchDir为空,我希望日志上有堆栈跟踪,但没有关于错误的任何信息。 我已经检查了代码,但我从未尝试捕获NullPointerException 以下是完整的方法代码: @覆盖 公共无效写入(JsonObject JsonObject)引发FileSystemEx

我的java代码中有一个奇怪的行为,我想问一些建议。 在多线程应用程序中,我编写了以下代码:

scratchDir.resolve(directoryTree.toFile().mkdirs();
对于一个bug,Object
scratchDir
为空,我希望日志上有堆栈跟踪,但没有关于错误的任何信息。 我已经检查了代码,但我从未尝试捕获NullPointerException

以下是完整的方法代码:

@覆盖
公共无效写入(JsonObject JsonObject)引发FileSystemException{
路径目录树=getRelativePath();
scratchDir.resolve(directoryTree.toFile().mkdirs();
字符串newFileName=getHashFileName(jsonObject);
Path filePath=scratchDir.resolve(directoryTree.resolve(newFileName);
debug(“将新文件Json{}写入持久存储目录{}”,newFileName,scratchDir);
File outputFile=filePath.toFile();
if(outputFile.exists()){
抛出新的FileReadyExistsException(filePath.toString());
}
try(FileWriter FileWriter=newfilewriter(outputFile)){
write(jsonObject.toString());
fileWriter.flush();
}捕获(例外e){
错误(e);
}
}

为什么我的日志中没有异常?

为什么要这样做

正确的方法是:

Files.createDirectories(scratchDir.resolve(directoryTree));
不要混淆新旧API。旧的mkdirs()api要求检查返回值;如果为false,则操作失败,并且您不会从异常中获益来告诉您原因。这就是为什么首先要有一个新的API的主要原因

你确定你没有困惑——这才是真正的问题吗?您拥有的代码行将很高兴地完全不做任何事情(没有目录,没有日志或异常)。如果无法创建目录,上面的行将抛出,因此从那里开始


然后,如果该行正在运行且未记录任何内容,则您已捕获NPE并将其丢弃在未粘贴的位置。

如果该行不在日志中,则很可能您没有记录它。
NullPointerException
将从该方法中抛出,因此接下来会发生什么取决于该方法的调用方如何处理异常。如果没有,我们就无法真正帮助您。您可以自己说:“我已经检查了代码,我从来没有尝试捕获NullPointerException。”如果您希望记录和/或处理nullpointer,您应该尝试/捕获在第4行出现异常的位置。好吧,这可能是Java中真正误解的地方。NullPointer异常在到达邮件并以任何方式发送到stderr之前不会弹出?感谢您的建议,刚才我想我已经混合了IO和nioapi。我将更改代码,并尝试了解在何处放弃异常。