因此,我尝试制作一个小程序,以自定义方式显示来自某个应用的聊天记录。我alredy构建了我的GUI,我可以从.txt文件中读取消息。我的问题是,当我在控制台上打印它们时,程序大约需要1.5秒来处理17k行文件。但是,当我尝试在GUI上显示文本时,大约需要一分半钟,我不知道为什么。
要从文件中读取文本,我使用的是BufferedReader。要在JTextArea上显示文本,我所做的就是以下内容:
JTextArea.append(myString+"\n");
我的测试文件大约有1,000,000个字符,如果有任何帮助的话。我真的很想知道发生了什么,也许还有一些关于如何修复它的建议。提前谢谢。
答案 0 :(得分:1)
使用StringBuilder构建String,然后只需在TextArea中调用setText(),这样就不会强制重新绘制每行的区域。
// copy any remaining elements
while (arr1.size() > 0)
sorted.add(arr1.get(0));
while (arr2.size() > 0)
sorted.add(arr2.get(0));
打印:
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));
});
}
使用JTextArea.append()测量第一个时间差,第二个时间是StringBuilder.append(),后跟JTextArea.setText()。