【发布时间】:2014-12-22 08:07:19
【问题描述】:
我是一个没有经验的 Java 开发人员,正在编写一个处理备份的应用程序。
我的应用程序打开一个 gui(使用 NetBeans 模板编写的 StepTwoBackup),它从用户那里收集一些信息,然后当我按下“下一步”按钮时,gui 将这些信息传递给一个对象(BackupRestore,它正在记录所有使用 Log4J 进行操作),然后打开另一个窗口 (StepThreeBackup) 并将对象传递给它。
在这个新窗口(StepThreeBackup)中,我自动在传递的对象(BackupRestore.execute())上启动一个执行备份的方法。 在最后一个窗口 (StepThreeBackup) 中,我创建了一个 JTextArea,我想在其中显示 Log4J 的输出(当前写入日志文件并输出到控制台)。
有没有办法做到这一点?我读过我应该使用附加程序,但无法弄清楚如何正确执行此操作。
目前我在我的工作 Log4J 属性文件中创建了以下条目:
<appender name="guiAppender" class="BackupAppGui.StatusMessageAppender">
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
</layout>
</appender>
然后是我的包中的以下类(在另一篇文章之后):
打包BackupAppGui;
/**
*
* @author MSTPA
*/
import javax.swing.JTextArea;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
public class StatusMessageAppender extends AppenderSkeleton {
private final JTextArea jTextA;
public StatusMessageAppender() {
jTextA = StepThreeBackup.getJTextA();
}
protected void append(LoggingEvent event)
{
if(event.getLevel().equals(Level.INFO)){
jTextA.append(event.getMessage().toString());
}
}
public void close()
{
}
public boolean requiresLayout()
{
return false;
}
}
但是没有任何东西写入 jTextArea。
我做错了什么?有人可以帮我解决这个问题吗?感谢您为我提供的所有帮助。
【问题讨论】: