我正在序列化 JTextPane
的 Document
以便将其样式文本保存到数据库中。我有一个 caretListener
附加到 JTextPane
,我想知道序列化此 Document
是否也会序列化 caretListener
。我需要知道这一点的原因是因为自定义 caretListener 类包含 JComboBox
并且当我尝试序列化时出现以下异常:
java.io.NotSerializableException: com.apple.laf.AquaComboBoxUI
我怀疑如果文档包含 caretListener,那就是此异常的原因。
这是序列化它的代码:
DefaultStyledDocument doc = (DefaultStyledDocument) getCellEditor().getCellEditorValue();
doc.setDocumentFilter(null);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject((DefaultStyledDocument) doc);
oos.flush();
byte[] data = bos.toByteArray();
oos.close();
bos.close();
然后我只是将数据
保存在数据库中。
附录
这是自定义插入符监听器:
MyTextPane textpane = new MyTextPane();
textpane.addCaretListener(new caretListener());
public class caretListener implements CaretListener {
MyTextpane textArea;
JToggleButton boldbutton;
JToggleButton italicbutton;
JToggleButton underlinebutton;
JComboBox fontscomboBox;
JComboBox fontSizecombobox;
// Methods
...
}
最佳答案
Document
通过 Writer
序列化并通过 Reader
反序列化。使用 JTextPane
的 getEditorKit()
以及该套件的写入/读取方法。
关于java - 序列化 JTextPane 的文档是否会序列化 JTextPane 的监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631150/