JTextArea附加性能

时间:2019-06-08 15:56:26

标签: java performance swing jtextarea

我想将文本打印到JTextArea中,为此我制作了一个简单的类来处理该问题

public class Console {
    private Console() {}
    private static Console instance;
    public static Console console() {
        if(instance == null) instance = new Console();
        return instance;
    }

    private JTextArea textArea;

    void setTextArea(JTextArea area) {
        textArea = area;
    }

    public void write(String message) {
        textArea.append(message+"\n");
        textArea.setCaretPosition(textArea.getDocument().getLength());
        textArea.update(textArea.getGraphics());
    }
}

现在,我开始执行我的应用程序,并且想要记录所有发生的事情,例如,我使用

   public void work(Set<File> files) {
        files.forEach(f -> {
            console().write("Working on " + f.getName());
            doWork(f);
        });
    }

现在的问题是-这种性能可能非常差。在较低规格(或笔记本电脑运行的省电模式)下,每增加一条新行,整个控制台都会闪烁一次,写入50条行需要几秒钟。这是什么原因?我该如何改善呢?

1 个答案:

答案 0 :(得分:1)

textArea.update(textArea.getGraphics());

不要使用该语句。永远都不需要这样做。

当更改组件的属性(在这种情况下,当您更改文本)时,Swing组件将自动重新绘制自身。