Java 使用平滑图像时出现NotSerializableException
我最近开始在我的游戏中加入网络,这是我第一次有这样的经验 我正在使用这个光滑的API来处理我的图形(以及其他一些东西),并使用ObjectInputStreams和ObjectOutputStreams来进行联网 我决定通过服务器发送一个映像来测试连接,但遇到了映像的NotSerializableException:Java 使用平滑图像时出现NotSerializableException,java,image,networking,serialization,Java,Image,Networking,Serialization,我最近开始在我的游戏中加入网络,这是我第一次有这样的经验 我正在使用这个光滑的API来处理我的图形(以及其他一些东西),并使用ObjectInputStreams和ObjectOutputStreams来进行联网 我决定通过服务器发送一个映像来测试连接,但遇到了映像的NotSerializableException: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.newdawn.slick.Image
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1332)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at inGame.ConnectClient.alwaysGet(ConnectClient.java:50)
at inGame.ConnectClient.setUp(ConnectClient.java:26)
at inGame.ConnectClient.run(ConnectClient.java:34)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.io.NotSerializableException: org.newdawn.slick.Image
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
at inGame.ConnectServer.write(ConnectServer.java:40)
at scenes.HostMenu.update(HostMenu.java:47)
at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:268)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:657)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:408)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:318)
at scenes.Head.main(Head.java:47)
如何使对象可序列化?还是我完全走错了方向
欢迎您的任何意见
谢谢 您正在使用
ObjectInputStream/ObjectOutputStream
将对象发送到远程客户端。您可以通过这种方式仅发送对象,这些对象是可序列化的,t.m。它们实现java.io.serializable
接口,并且它们的所有非瞬态字段都是基元值或实现java.io.serializable
第一个解决方案:使所有对象都可序列化。但是,如果您使用不可序列化的第三方对象,这将不起作用
第二种解决方案:使用java内置的其他序列化。例如,您可以使用非常健壮的Java序列化/反序列化库
第三种解决方案:XML序列化不是发送二进制数据(如图像)的最佳方式。在这种情况下,您需要自行处理序列化和反序列化。您将打开简单的输出/输入流,并在其中写入/读取二进制数据 使第三方类可序列化的一个简单方法是创建自己的类,该类扩展Image类并实现java.io.Serializable接口(请记住准备构造函数的所有版本,并将它们委托给基类的构造函数) 然而,Slick的Image类可能不可序列化,这是有充分理由的。如果它包含一些低级的、与操作系统相关的内容,则可能无法将其序列化,发送到服务器并在那里打开。也许一些更简单的解决方案,比如只将图像名称发送到服务器并从服务器上的文件加载它,会更可靠