0

テキストモデルとして使用するカスタムレンダラーとエディターをJtable使用JTextPaneするエディターとレンダラーを使用しています。DefaultStyledDocumentテーブルにはハイパーリンクが含まれており、これは属性付きのテキストHTML.Attribute.HREFです。このスタイル設定されたテキストをデータベースに保存するにはDefaultStyledDocument、XML に変換する必要があります。これを実行しようとすると、次の例外がスローされます。

javax.swing.text.html.HTML$Attributeのキーとしてシリアル化できませんAttributeSet

どうすればこれを修正できますか?

4

1 に答える 1

1

HTML.Attribute is not Serializable. For some reason Java developers decided not to add serialization support to HTML.Attribute as well as HTML.Tag. The most probable reason is that HTMLDocument which uses them is serialized into HTML text, and thus there's no need to serialize Java objects directly.

It's easy to fix, really. Create your own attribute:

public final class LinkAttribute implements Serializable {
    private static final long serialVersionUID = -472010305643114209L;

    public static final LinkAttribute HREF = new LinkAttribute("href");

    private final String name;

    private LinkAttribute(final String name) {
        this.name = name;
    }

    public boolean equals(final Object o) {
       return o instanceof LinkAttribute
              ? name.equals(((LinkAttribute) o).name)
              : false;
    }

    public int hashCode() {
        return name.hashCode();
    }

    public String toString() {
        return name;
    }
}

This is roughly the implementation of HTML.Attribute class, with Serializable interface added.

Use LinkAttribute.HREF everywhere you used HTML.Attribute.HREF.

于 2012-10-24T12:48:38.607 に答える