我有一个应用程序不断接收套接字上的数据,然后将此数据记录到文件中,同时还将这些数据显示在JTextPane中。自然地,随着数据被写入JTextPane的底层文档,内存使用量不断增加。限制JTextPane内存使用量
是否存在限制JTextPane允许使用的内存的简单方法?我希望JTextPane的工作方式类似于典型的命令行命令历史记录的工作方式。
我有一个应用程序不断接收套接字上的数据,然后将此数据记录到文件中,同时还将这些数据显示在JTextPane中。自然地,随着数据被写入JTextPane的底层文档,内存使用量不断增加。限制JTextPane内存使用量
是否存在限制JTextPane允许使用的内存的简单方法?我希望JTextPane的工作方式类似于典型的命令行命令历史记录的工作方式。
只是检查内容,并相应地擦拭,最大缓冲区大小..因为它是一个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
是更加严厉。
不,您必须在添加文本时计算字符数,并在您认为太多时删除一些字符。
请注意,JTextPane在它下面有一个DocumentModel,它可以让您访问字符数,也可以使删除操作稍微便利一些。
这是行不通的,你可能会认为它确实存在,但它没有,并且我在我的一个应用程序中遇到同样的问题。设想一个JTextPane,并且如果行号超过100,则从源中不断添加行,删除行0,然后添加新行。这应该使内存使用量保持在大致相同的水平,对吧?错了......随着时间的推移,我的Java应用程序爆炸,一个小时后已经有170MB的内存使用量,只有100行小文本。我完全不知道为什么,或者如何解决这个问题...... – 2017-07-07 12:13:51