Java Log ==> JTextArea

asm*_*smo 5 java logging jtextarea

需要:将Java应用程序的日志输出到GUI组件,例如JTextArea.

关注:需要以静态方式从任何类中记录事物.但是,GUI记录器组件不能是静态的(显然),因为它是父组件的成员.

我该怎么办?

dac*_*cwe 1

创建一个单例日志提供程序并将“文本字段”添加为它的侦听器。

记录器 singleton 的示例:

interface Listener {
    void log(String log);
}

enum Logger {

    instance;

    private List<Listener> listeners = new LinkedList<Listener>();

    public void addListener(Listener l) {
    synchronized(listeners) {
        listeners.add(l);
     }
    }

    public void log(String log) {
        synchronized(listeners) {
            for(Listener l : listeners)
                l.log(log);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

添加您的侦听器(您需要自己实现),如下所示:

Logger.instance.addListener(myTextField);
Run Code Online (Sandbox Code Playgroud)

并像这样使用它(从任何类):

Logger.instance.log("Hello World!");
Run Code Online (Sandbox Code Playgroud)

或者您可以使用像log4j这样的包。

  • 不要再编写另一个日志框架,就不要这样做。使用log4j(或者slf4j,它似乎很流行) (4认同)
  • 我不同意,如果你想做这么简单的事情,就不要添加另一个依赖项。 (2认同)