public void saveBlog() {
try {
Connect.getConnection();//这里连接数据库,数据库连接应该没问题
StyledDocument doc = content.getStyledDocument();//content是一个JTextPane
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(doc); ByteArrayInputStream bais = new ByteArrayInputStream(baos
.toByteArray()); PreparedStatement st = Connect.con
.prepareStatement("insert into blog (title, content, owner) values (?, ? ,?)");
st.setString(1, title.getText());
st.setBinaryStream(2, bais);
st.setInt(3, 5);
st.execute(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void loadBlog() {
try {
Connect.getConnection();
Statement state = Connect.con.createStatement();
ResultSet rs;
rs = state.executeQuery("select * from blog"); rs.next();
StyledDocument doc = new MyDocument(); String t = rs.getString("title");
Blob blob = rs.getBlob("content"); title.setText(t);//这里是成功的
ByteArrayInputStream bais = new ByteArrayInputStream(blob.getBytes(
1, (int) blob.length()));
ObjectInputStream ois = new ObjectInputStream(bais);
System.out.print(ois.toString());
doc = (StyledDocument) ois.readObject();//这里抛出异常  异常下面列出 content.setDocument(doc);
Connect.closeConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
下面是抛出的异常[email protected]: javax.swing.plaf.FontUIResource; serializable and externalizable flags conflict
at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:630)
at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:809)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1565)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at javax.swing.text.StyleContext.readAttributeSet(StyleContext.java:629)
at javax.swing.text.StyleContext$NamedStyle.readObject(StyleContext.java:1570)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at javax.swing.text.StyleContext.readAttributeSet(StyleContext.java:629)
at javax.swing.text.StyleContext$NamedStyle.readObject(StyleContext.java:1570)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:480)
at javax.swing.text.StyleContext.readObject(StyleContext.java:706)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:480)
at javax.swing.text.AbstractDocument.readObject(AbstractDocument.java:1416)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at system.AddBlog.loadBlog(AddBlog.java:198)
at system.AddBlog.actionPerformed(AddBlog.java:147)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6216)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5981)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
不知道serializable and externalizable flags conflict是什么  怎么产生的   怎样解决者问题,各位高手指点一下,我对序列化 学的不是很多,还烦请详细解释一下,谢谢了

解决方案 »

  1.   

    刚看到楼主的帖子。楼主犯了一个小错误:对于javax.swing包中或了包text包中组件,其序列化与JDKq.4及以后是不兼容的。是不建议用ObjectOutputStream或ObjectInputStream来处理的。
    怎么办呢?
    SUN JDK API中讲得很清楚,建议使用XMLEncoder与XMLDecoder来取代ObjectOutputStream或ObjectInputStream来处理楼主的那个javax.swing包中的javaBeans或text子包中的beans就行了.楼主的
    StyledDocument doc = content.getStyledDocument();//content是一个JTextPane 
    中doc应该用XMLEncoder写。对方用XMLDecoder来读就行了。
      

  2.   


    我用了XMLEncoder些到数据库了 但是里面产生的XML是
    <?xml version="1.0" encoding="UTF-8"?> 
    <java version="1.6.0_13" class="java.beans.XMLDecoder"> 
     <object class="addBlog.MyDocument"> 
      <void property="documentProperties"> 
       <void method="put"> 
        <object class="java.awt.font.TextAttribute" field="RUN_DIRECTION"/> 
        <boolean>false</boolean> 
       </void> 
      </void> 
     </object> 
    </java> 
    跟我写在content里里面的内容没关系
    StyledDocument doc = content.getStyledDocument();
    // System.out.println(doc.getLength() + "写");
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    XMLEncoder oos = new XMLEncoder(baos);
    oos.writeObject(doc);
    System.out.println(doc instanceof DefaultStyledDocument);
    oos.flush();
    oos.close();
      

  3.   

    [email protected]: javax.swing.plaf.FontUIResource; serializable and externalizable flags conflict ?
    某个类要实现序列化,这个类要实现Serializable接口或者Externalizable,异常信息是这两个冲突?什么意思。期待高人