3

HTML を使用して JLabel にテキストを設定すると、ラベル テキストが非常に短い場合でも、8KB のバッファが割り当てられることがわかりました。少し調べてみると、原因は DefaultStyledDocument にあるようです。

public static final int BUFFER_SIZE_DEFAULT = 4096;

テキストが変更されるたびに、プロパティ変更リスナーが起動し、デフォルトのバッファ サイズの GapContent を使用して新しい HTMLDocument が割り当てられるように見えます。UTF-16 の 4k 文字は、小さな小さなラベルに 8K 相当のメモリを提供します。

私が知る限り、ドキュメントが割り当てられる前にその値を変更することはできません。Java リフレクションを使用してプライベート静的最終フィールドを変更するごとに、リフレクションが役立つかもしれないと思いましたが、2番目の回答によると、運が悪いようです。事後にギャップバッファのサイズを変更することを考えましたが、それはかなり難しいようです。

誰もこれに遭遇しましたか?チャンスをつかむには、非常にハックする必要があると思います...

ありがとう!

4

1 に答える 1

1

私はこれに遭遇していませんが、指定された初期長のGapContentを使用してこのコンストラクターを使用できますか?デフォルトのコンストラクターは、デフォルトのバッファーサイズを使用します。

public DefaultStyledDocument()
{
    this(new GapContent(BUFFER_SIZE_DEFAULT), new StyleContext());
}

だからただ使うnew HTMLDocument(new GapContent(/*whatever works for you*/), new StyleContext())

于 2012-06-28T07:04:07.473 に答える