Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用平滑图像时出现NotSerializableException_Java_Image_Networking_Serialization - Fatal编程技术网

Java 使用平滑图像时出现NotSerializableException

Java 使用平滑图像时出现NotSerializableException,java,image,networking,serialization,Java,Image,Networking,Serialization,我最近开始在我的游戏中加入网络,这是我第一次有这样的经验 我正在使用这个光滑的API来处理我的图形(以及其他一些东西),并使用ObjectInputStreams和ObjectOutputStreams来进行联网 我决定通过服务器发送一个映像来测试连接,但遇到了映像的NotSerializableException: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:

我最近开始在我的游戏中加入网络,这是我第一次有这样的经验

我正在使用这个光滑的API来处理我的图形(以及其他一些东西),并使用ObjectInputStreams和ObjectOutputStreams来进行联网

我决定通过服务器发送一个映像来测试连接,但遇到了映像的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类可能不可序列化,这是有充分理由的。如果它包含一些低级的、与操作系统相关的内容,则可能无法将其序列化,发送到服务器并在那里打开。也许一些更简单的解决方案,比如只将图像名称发送到服务器并从服务器上的文件加载它,会更可靠