0

我有一个Jtable使用自定义渲染器和编辑器,JTextPane用作编辑器和渲染器,DefaultStyledDocument用作文本模型。该表包含超链接,它们是带有HTML.Attribute.HREF属性的文本。为了将此样式文本保存到数据库中,我需要将其转换DefaultStyledDocument为 XML 并尝试这样做会引发此异常:

javax.swing.text.html.HTML$Attribute不可序列化为AttributeSet.

我怎样才能解决这个问题?

4

1 回答 1

1

HTML.Attribute不是Serializable。由于某种原因,Java 开发人员决定不将序列化支持添加HTML.AttributeHTML.Tag. 最可能的原因是HTMLDocument使用它们被序列化为 HTML 文本,因此不需要直接序列化 Java 对象。

很容易修复,真的。创建自己的属性:

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;
    }
}

这大致是HTML.Attribute类的实现,Serializable添加了接口。

在您使用过的LinkAttribute.HREF任何地方使用HTML.Attribute.HREF

于 2012-10-24T12:48:38.607 回答