2014-12-04 62 views
0

我寫了一個方法,在JTextPane中寫入hello world!\ n 10000次。當我使用hello world時,我認識到 明顯的性能下降!沒有換行。當文本包含換行符時,JTextPane中的顯着性能差異

例子:

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"); 
    } 
} 

,這可能是該現象的原因是什麼?有任何想法嗎?

+2

http://java-sl.com/JEditorPanePerformance.html最後一節提出了一種修復方法 – StanislavL 2014-12-05 13:11:50

+0

@StanislavL:謝謝! – Ramses 2014-12-09 08:13:27

回答

1

StyledDocument具有兩級數據結構:段落(換行符!)和該元素下。樣式屬性可以是段落或元素。

添加一個換行符可能意味着插入一個新的(空的)段落。在每種情況下都會發生,而不僅僅是一個元素插入。

相關問題