Java 位于org.apache.log4j.helpers.CountingQuietWriter.write的编写器上的NullPointerException

Java 位于org.apache.log4j.helpers.CountingQuietWriter.write的编写器上的NullPointerException,java,nullpointerexception,log4j,Java,Nullpointerexception,Log4j,我从log.info语句的一行简单代码中得到以下错误 java.lang.NullPonterException at java.io.Writer.write(Writer.java:157) at org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:45) at org.apache.log4j.WritingAppender.subAppend(WriterAppen

我从log.info语句的一行简单代码中得到以下错误

java.lang.NullPonterException
    at java.io.Writer.write(Writer.java:157)
    at org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:45)
    at org.apache.log4j.WritingAppender.subAppend(WriterAppender.java:310)
    at org.apache.log4j.RollingAppender.subAppend(RollingAppender.java:276)
    at org.apache.log4j.WritingAppender.append(WriterAppender.java:162)
    at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
    at org.apache.log4j.helpers.AppenderAttachbleImpl.appendLoopOnAppenders(AppenderAttachbleImpl.java:66)
    at org.apache.log4j.Category.callAppenders(Category.java:206)
    at org.apache.log4j.Category.forcedLog(Category.java:391)
    at org.apache.log4j.Category.info(Category.java:666)
    at com.bizcase.Helper.showTip(Helper.java:32)
如果遇到此问题,是否有人可以提供建议

我使用的是log4j版本1.2.17和普通的滚动appender

它不是null对象的NullPonterException。它来自log4j库,超出了我的控制范围,无法确定是哪个log4j属性或代码导致了此问题。

查看源代码1:

  • “org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:45)”是对Writer.write(String)的调用

  • write.write(String)只能在字符串为null时抛出NPE

  • 这意味着CountingQuietWriter.write是用
    null
    参数调用的

等等。(剩下的你可以做!)

我想您会发现根本原因是,
org.apache.log4j.Category.info(…)
被调用时带有
null
消息

另外,请注意
类别的javadoc声明:

绝对不需要新的客户端代码来使用或引用Category类。如果可能,请避免提及或使用它


因此,如果
com.bizcase.Helper
是您的代码,则需要对其进行修改,以修复NPE错误并避免直接使用
类别

如果不是您的代码,您需要在
info
调用中找出空字符串的来源。我的猜测是,这是一个缺少的工具提示。。。或者类似的



1-我在这方面遇到了障碍,因为我不知道您使用的Java和log4j的确切版本,因此无法确定我是否有正确的源代码。我不知道
com.bizcase.Helper
的源代码是什么样子的。另一方面,你。。。作为开发者。。。我能找到这些东西。这对您来说非常容易。

在IDE中安装log4j的源代码并调试它。在异常行中,您将看到异常的原因。“…我无法控制,无法确定是哪个log4j属性或代码导致了此问题。”-建议:调整这种态度。它不是超出某人的控制范围,1)可以访问源代码,2)可以访问调试器。注意-请参阅我的答案,这证明解决此问题并非“超出您的控制”。(如果我能从stacktrace、一些源代码和一些简单的逻辑演绎中得到那么多,那么任何程序员都能做到。)这可能超出了你(当前)的技能水平,但提高你的技能>>isI我不认为这是一个重复,正如你的回答所示,这是一个特定的NPE。干杯