【发布时间】: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..
这意味着没有附加日志消息,我不知道为什么会发生。你能告诉我怎么做吗?
【问题讨论】:
-
您能否在点击运行按钮时放置控制台数据以进行更多说明。
-
1) 为了尽快获得更好的帮助,请发帖 minimal reproducible example 或 Short, Self Contained, Correct Example。 2) Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同的语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 ..
-
BTW
public static JTextArea logTextArea = new JTextArea();这个变量声明似乎掩盖了实际添加到 GUI 中的另一个logTextArea。它不会(永远)那样工作。TextAreaAppender可能有一个构造函数,它接受记录器必须附加到的JTextArea。
标签: java swing nullpointerexception log4j jcomponent