'HTML属性不可序列化'异常(java)

时间:2012-10-23 21:45:30

标签: java xml xml-serialization document jtextpane

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

  

javax.swing.text.html.HTML$Attribute无法序列化为AttributeSet中的密钥。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

HTML.Attribute不是Serializable。出于某种原因,Java开发人员决定不向HTML.Attribute以及HTML.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