我发现每当我使用 HTML 在 JLabel 上设置文本时,都会分配一个 8KB 缓冲区,即使我的标签文本可能很短。仔细研究一下,看起来罪魁祸首在于 DefaultStyledDocument:
public static final int BUFFER_SIZE_DEFAULT = 4096;
看起来每次文本更改时,都会触发一个属性更改监听器,并分配一个新的 HTMLDocument,其中包含默认缓冲区大小的 GapContent。 UTF-16 中的 4k 个字符为一个小标签提供了 8K 的内存。
据我所知,在分配文档之前我无法更改该值。根据 Change private static final field using Java reflection,我认为反射可能会派上用场,但根据第二个答案,我似乎运气不好。我考虑过事后调整间隙缓冲区的大小,但这似乎很棘手。
有人遇到过这个吗?我预计我将不得不变得非常黑客才能有机会......
谢谢!
最佳答案
我没有遇到过这个,但你能用 this constructor 吗?使用 GapContent具有指定的初始长度?默认构造函数使用默认缓冲区大小。
public DefaultStyledDocument()
{
this(new GapContent(BUFFER_SIZE_DEFAULT), new StyleContext());
}
所以只需使用 new HTMLDocument(new GapContent(/*whatever works for you*/), new StyleContext())
关于java - 如何修改 HTML JLabel 以使用小于 8k 的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11237700/