【问题标题】:Doesn't append to JTextArea with Log4j不使用 Log4j 附加到 JTextArea
【发布时间】:2018-08-22 08:24:31
【问题描述】:

我有以下问题:

我有应用程序。我想用 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.. 

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

【问题讨论】:

标签: java swing nullpointerexception log4j jcomponent


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    相关资源
    最近更新 更多