Limitar o uso do espaço JTextPane

Eu estou usando JTextPane para registrar alguns dados de um aplicativo de rede e depois que o programa é executado por cerca de mais de 10 horas ou mais eu recebo erro de heap de memory. O texto continua a ser adicionado ao JTextPane, que continua aumentando o uso da memory. Existe alguma maneira que eu possa fazer o JTextPane agir como uma janela de prompt de comando? Devo me livrar do texto antigo como novo texto vem? Este é o método que estou usando para gravar no JTextPane.

volatile JTextPane textPane = new JTextPane(); public void println(String str, Color color) throws Exception { str = str + "\n"; StyledDocument doc = textPane.getStyledDocument(); Style style = textPane.addStyle("I'm a Style", null); StyleConstants.setForeground(style, color); doc.insertString(doc.getLength(), str, style); } 

Você pode remover uma quantia equivalente do início do StyledDocument quando o seu comprimento exceder um determinado limite:

 int docLengthMaximum = 10000; if(doc.getLength() + str.length() > docLengthMaximum) { doc.remove(0, str.length()); } doc.insertString(doc.getLength(), str, style); 

Você vai querer aproveitar o Documents DocumentFilter

 public class SizeFilter extends DocumentFilter { private int maxCharacters; public SizeFilter(int maxChars) { maxCharacters = maxChars; } public void insertString(FilterBypass fb, int offs, String str, AttributeSet a) throws BadLocationException { if ((fb.getDocument().getLength() + str.length()) > maxCharacters) int trim = maxCharacters - (fb.getDocument().getLength() + str.length()); //trim only those characters we need to fb.remove(0, trim); } super.insertString(fb, offs, str, a); } public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a) throws BadLocationException { if ((fb.getDocument().getLength() + str.length() - length) > maxCharacters) { int trim = maxCharacters - (fb.getDocument().getLength() + str.length() - length); // trim only those characters we need to fb.remove(0, trim); } super.replace(fb, offs, length, str, a); } } 

Baseado no filtro do limitador de caracteres de http://www.jroller.com/dpmihai/entry/documentfilter

Você precisará aplicá-lo às áreas de texto Componente de texto …

 ((AbstractDocument)field.getDocument()).setDocumentFilter(...)