2010-01-05 26 views
7

Tengo una aplicación que continuamente recibe datos en un socket, y luego registra estos datos en un archivo mientras también muestra estos datos en un JTextPane. Naturalmente, a medida que los datos se escriben en el documento subyacente de JTextPane, el uso de la memoria continúa aumentando.Limite el uso de memoria de JTextPane

¿Existe una manera simple de limitar la memoria que se permite utilizar en JTextPane? Me gustaría que el JTextPane funcione de forma similar a cómo funciona el historial de comandos de un shell de comando típico.

Respuesta

7

acaba de comprobar el contenido y limpie de acuerdo a un tamaño máximo de búfer .. ya que es un JTextPane que sería trabajar en clase de documento utilizado por textPane:

void clampBuffer(int incomingDataSize) 
{ 
    Document doc = textPane.getStyledDocument(); 
    int overLength = doc.getLength() + incomingDataSize - BUFFER_SIZE; 

    if (overLength > 0) 
    { 
     doc.remove(0, over_length); 
    } 
} 

Esto es sólo un fragmento que escribí, dejase' Lo verifico personalmente ... es solo para darle la idea. Por supuesto, debe ejecutarse antes de agregar texto a textPane.

Por cierto, si no está utilizando las capacidades de edición enriquecida del JTextPane, le sugiero que utilice un JTextArea que sea mucho más ligero.

+0

Esto no funciona, puede pensar que sí, pero no es así, y tengo el mismo problema en una aplicación mía. Imagine un JTextPane y agrega constantemente líneas desde una fuente, si el número de línea es superior a 100, elimine la línea 0 y luego agregue una nueva línea. Esto debería mantener el uso de memoria en aproximadamente el mismo nivel, ¿verdad? Mal ... con el tiempo, mi aplicación java explota y después de una hora ya usa 170MB de memoria, con solo 100 líneas de texto pequeño. No tengo ni idea de por qué o cómo solucionar esto ... –

0

No, tienes que contar los caracteres cuando agregas texto, y eliminar algunos cuando crees que es demasiado.

Tenga en cuenta que JTextPane tiene un DocumentModel debajo que le puede dar acceso a los conteos de caracteres y también puede hacer que las eliminaciones sean un poco más prácticas.