我写了一个方法,在JTextPane中写入 hello world!\ n 10000次。我认出了一个 使用 hello world!时没有换行的显着性能下降。
示例:
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.text.*;
public class JTextPaneTest {
JTextPane textPane = new JTextPane();
Document doc = new DefaultStyledDocument();
//constructor
JTextPaneTest() {
for(int i=0;i<10000;i++) {
try {
doc.insertString(doc.getLength(), i+" hello world!", null);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
textPane.setDocument(doc);
createWindow();
}
public void createWindow() {
JFrame frame = new JFrame();
frame = new JFrame("frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.getContentPane().add(new JScrollPane(textPane), BorderLayout.CENTER);
frame.setVisible(true);
}
public static void main(String[] args) {
System.out.println("start...");
float startTime = System.nanoTime();
new JTextPaneTest();
float stopTime = System.nanoTime() - startTime;
System.out.println("elapsed time main: "+stopTime/1000000000+ "s");
}
}
这种现象可能是什么原因?有什么想法吗?
答案 0 :(得分:1)
StyledDocument有两级数据结构:段落(换行符!)和该元素。样式属性可以是段落或元素。
添加换行符可能意味着插入一个新的(空)段落。在每种情况下,都会发生更多事情,而不仅仅是元素插入。