【问题标题】:Limit JTextPane memory usage限制 JTextPane 内存使用
【发布时间】:2010-01-05 14:29:36
【问题描述】:

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

有没有一种简单的方法来限制允许 JTextPane 使用的内存?我希望 JTextPane 的工作方式与典型命令 shell 的命令历史记录的工作方式类似。

【问题讨论】:

    标签: java memory-management jtextpane


    【解决方案1】:

    只需检查内容并将其相应地擦除到最大缓冲区大小.. 因为它是 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);
       }
    }
    

    这只是我写的一个sn-p,没有亲自检查..只是给你一个想法。当然它应该在向 textPane 添加文本之前运行。

    顺便说一句,如果您没有使用 JTextPane 的丰富编辑器功能,我建议您使用更轻松的 JTextArea

    【讨论】:

    • 这不起作用,您可能认为它起作用,但它不起作用,我的应用程序中也有同样的问题。想象一个 JTextPane,你不断地从源中添加行,如果行号超过 100,删除第 0 行,然后添加新行。这应该将内存使用量保持在大致相同的水平,对吧?错误...随着时间的推移,我的 Java 应用程序爆炸,一个小时后内存使用量已经达到 170MB,只有 100 行小文本。我完全不知道为什么,或者如何解决这个问题......
    【解决方案2】:

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

    请注意,JTextPane 在其下方有一个 DocumentModel,它可以让您访问字符数,还可以让删除更方便一些。

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 2011-03-27
      • 2021-05-12
      • 2014-04-27
      • 2012-09-28
      • 2017-05-12
      • 2011-03-15
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多