繁体   English   中英

不使用 Log4j 附加到 JTextArea

[英]Doesn't append to JTextArea with Log4j

我有以下问题:

我有应用程序。 我想用 Log4J 将信息记录到JTextArea 我知道我必须创建一个extends AppenderSkeleton的类,并在单击运行按钮时创建一个逻辑来记录消息并将其附加到文本区域组件。 这是我制作的课程:

public class TextAreaAppender extends AppenderSkeleton
{
    public static JTextArea logTextArea = new JTextArea();

    @Override
    public void append(LoggingEvent logEvent)
    {
        String logMessage = this.layout.format(logEvent);
        logTextArea.append(logMessage);
    }

    @Override
    public void close()
    {

    }

    @Override
    public boolean requiresLayout()
    {
        return false;
    }
}

在按钮的 UI 和逻辑类中,文本区域组件有以下代码:

logTextArea = new JTextArea();

logTextArea.setEnabled(false);
scrollTextArea = new JScrollPane(logTextArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollTextArea.setBounds(50, 300, 300, 140);
TextAreaAppender.logTextArea = logTextArea;

这是我在 log4j 属性文件中的配置:

log4j.rootLogger = INFO, textarea
log4j.appender.textarea = bis.debug.mode.ui.TextAreaAppender
log4j.appender.textarea.layout = org.apache.log4j.PatternLayout
log4j.appender.textarea.layout.ConversionPattern= %d{HH:mm:ss} -%m%n

现在,当我单击运行按钮时,它必须记录文本区域组件发生的错误,但会引发异常:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException.. 

这意味着没有附加日志消息,我不知道为什么会发生这种情况。 你能告诉我怎么做吗?

您正在 append 方法中使用继承的布局属性,该属性为null,因为您尚未对其进行初始化。 您可以在 append 方法中设置自己的布局,在使用 append 之前初始化属性,或者在 append 方法中根本不使用它,因为它是可选的。

@Override
    public void append(LoggingEvent logEvent)
    {
        String logMessage = this.layout.format(logEvent);
        logTextArea.append(logMessage);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM