gpt4 book ai didi

java - 优化 JTextArea 文本绘制

转载 作者:行者123 更新时间:2023-11-30 07:43:49 25 4
gpt4 key购买 nike

所以,我正在尝试制作一个小程序,以自定义方式显示某个应用程序的聊天日志。我已经构建了 GUI,并且可以从 .txt 文件中读取消息。我的问题是,当我在控制台上打印它们时,程序大约需要 1.5 秒来处理 17k 行文件。但是,当我尝试在 GUI 上显示文本时,大约需要一分半钟,我不知道为什么。

为了从文件中读取文本,我使用了 BufferedReader。要在 JTextArea 上显示文本,我所做的就是以下操作:

JTextArea.append(myString+"\n");

我的测试文件大约有 1,000,000 个字符长,如果这有帮助的话。我真的很想知道发生了什么,也许还想知道一些如何解决它的建议。提前致谢。

最佳答案

使用 StringBuilder 构建字符串,然后只需在 TextArea 中调用一次 setText() 即可,这样就不必强制为每一行重新绘制该区域。

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(() -> {
JFrame frame =new JFrame();
JTextArea area = new JTextArea();
JScrollPane pane = new JScrollPane(area);

frame.add(pane);
frame.setPreferredSize(new Dimension(400,400));
frame.pack();
frame.setVisible(true);
long t1 = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
area.append(i+"\n");
}
long t2 = System.currentTimeMillis();
System.out.println("(t2-t1) = " + (t2-t1));
StringBuilder sb = new StringBuilder();
long t3 = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
sb.append(i+"\n");
}
long t4 = System.currentTimeMillis();
area.setText(sb.toString());
System.out.println("(t4-t3) = " + (t4-t3));

});
}

打印:

(t2-t1) = 2871
(t4-t3) = 26

第一个时间差是使用 JTextArea.append() 测量的,第二个时间差是使用 StringBuilder.append() 测量的,然后是 JTextArea.setText()。

关于java - 优化 JTextArea 文本绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34234721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com