2010-01-05 32 views
7

我有一个应用程序不断接收套接字上的数据,然后将此数据记录到文件中,同时还将这些数据显示在JTextPane中。自然地,随着数据被写入JTextPane的底层文档,内存使用量不断增加。限制JTextPane内存使用量

是否存在限制JTextPane允许使用的内存的简单方法?我希望JTextPane的工作方式类似于典型的命令行命令历史记录的工作方式。

回答

7

只是检查内容,并相应地擦拭,最大缓冲区大小..因为它是一个JTextPane,你会通过textpane使用的文档类工作:

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

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

这仅仅是一个片断,我写,没”不要亲自检查它,只是为了给你提供这个想法。当然,它应该在向textPane添加文本之前运行。

顺便说一句,如果你没有使用JTextPane的丰富的编辑器功能,我建议你使用一个JTextArea是更加严厉。

+0

这是行不通的,你可能会认为它确实存在,但它没有,并且我在我的一个应用程序中遇到同样的问题。设想一个JTextPane,并且如果行号超过100,则从源中不断添加行,删除行0,然后添加新行。这应该使内存使用量保持在大致相同的水平,对吧?错了......随着时间的推移,我的Java应用程序爆炸,一个小时后已经有170MB的内存使用量,只有100行小文本。我完全不知道为什么,或者如何解决这个问题...... – 2017-07-07 12:13:51

0

不,您必须在添加文本时计算字符数,并在您认为太多时删除一些字符。

请注意,JTextPane在它下面有一个DocumentModel,它可以让您访问字符数,也可以使删除操作稍微便利一些。