我有Jtable
使用自定义渲染器和编辑器,它使用JTextPane
作为编辑器和渲染器,它使用DefaultStyledDocument
作为文本模型。该表包含超链接,这些超链接是具有HTML.Attribute.HREF
属性的文本。为了将这个样式化的文本保存到数据库中,我需要将DefaultStyledDocument
转换为XML并尝试这样做会抛出此异常:
javax.swing.text.html.HTML$Attribute
无法序列化为AttributeSet
中的密钥。
我该如何解决这个问题?
答案 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
。