【问题标题】:Java - send Documents through ObjectOutputStream [duplicate]Java - 通过 ObjectOutputStream 发送文档 [重复]
【发布时间】:2012-12-07 21:44:51
【问题描述】:

好的,我正在尝试创建一个连接到服务器的浏览器,当用户输入一个 url 时,浏览器会将该 url 发送到服务器。然后,服务器在 JEditorPane 中打开 url,然后使用 getDocument() 方法尝试通过 ObjectOutputStream 将该文档发送回客户端。不幸的是,我无法弄清楚这一点,是无法通过 objectoutputstream 发送 Document 还是我做错了什么?

这是我正在使用的代码:

设置页面并获取文档的方法:

url = (String) input.readObject();

window.setPage(url);
doc = window.getDocument();

sendDoc(doc);

通过objectoutputstream发送Document的方法:

try {

    output.writeObject(doc); // no compiling errors...
    output.flush();

} catch (Exception e) { }

我得到的错误:

java.io.WriteAbortedException: writing aborted;
java.io.NotSerializableException:
javax.swing.text.html.CSS$Value is not serializable as a value in an AttributeSet

...

at DawgsCodeBrowser.whileConnected(DawgsCodeBrowser.java:101)
at DawgsCodeBrowser.Run(DawgsCodeBrowser.java:71)
at StartBrowser.main(StartBrowser.java:8)
Caused by: java.io.NotSerializableException:
javax.swing.text.html.CSS$Value is not serializable as a value in an AttributeSet

...

at DawgsCodeServer.sendDoc(DawgsCodeServer.java:154)
at DawgsCodeServer.whileConnected(DawgsCodeServer.java:100)
at DawgsCodeServer.Run(DawgsCodeServer.java:59)
at StartServer.main(StartServer.java:11)

抱歉,错误信息太长了,我把它删掉了一些,所以它不会那么长...

【问题讨论】:

  • 您尝试编写的对象确实实现了serializable 接口。错误消息中的第一行。 doc 是什么类?

标签: java document objectoutputstream


【解决方案1】:

这里是这么说的:

Caused by: java.io.NotSerializableException: javax.swing.text.html.CSS$Value is not serializable as a value in an AttributeSet 

这个内部的 CSS$Value 类正在杀死你,你可能对此无能为力。

您需要质疑为什么在这种情况下发送文档比发送实际的原始 HTML 更好。

【讨论】:

  • 为什么它首先要序列化CSS.Value?序列化CSS 还不够吗? CSSSerializable
  • 因为数据结构在内部引用了一个 CSS$Value。 java 序列化程序只是遍历对象,它偶然发现了一个 CSS$Value 的实例,它显然是不可序列化的。一旦被发现,它就会毁了整个派对。
猜你喜欢
  • 2023-04-01
  • 2015-11-17
  • 2013-07-13
  • 2015-10-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
相关资源
最近更新 更多