java.io.NotSerializableException:这是啥异常啊??????

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.io.NotSerializableException:这是啥异常啊??????相关的知识,希望对你有一定的参考价值。

java.io.NotSerializableException: conn.GroupInfo
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
收集完成,是否选择继续增加小组信息(Y/N)?
at java.io.ObjectOutputStream.writeArray(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at conn.GroupManage.addMessage(GroupManage.java:203)
at conn.GroupManage.ManageMenu(GroupManage.java:62)
at conn.MainMenu.mainMenu(MainMenu.java:55)
at conn.MainMenu.enterMenu(MainMenu.java:101)
at conn.MainMenu.main(MainMenu.java:30)

对象输出流的对象所对应的类还没有实现Serializable接口。调用ObjectOutputStream输出的对象必须实现这个接口,创建的pojo类未实现Serializable接口,启动服务器会报此异常,但是貌似对代码功能没影响,或者说暂时未发现有什么影响。要解决此异常,可通过实现该接口解决。

1,异常产生原因:

在整个推的项目中,消息是一个Message类,Message必须转换为字节传输,因此在Message类中实现了Serializable接口,在服务器中将Message编码传输到客户端中解码,就是这个环节发生了错误,这是因为服务端的Message类和客户端的Message类的包路径不一样,导致编码和解码不一致,自然会报异常!

2,异常解决

1序列化的类最好加上serialVersionUID,免java.io.InvalidClassException,不同的JVM对serialVersionUID的计算方法可能不一样,就算类的定义和序列化后的对象是一致的,也可能从JVM-A里序列化后的对象到达JVM-B后,JVM-B认为 Class Invalid

2服务端和客户端编解码的类的路径要一致

参考技术A 你的对象输出流的对象所对应的类还没有实现Serializable接口。调用ObjectOutputStream输出的对象必须实现这个接口的本回答被提问者和网友采纳 参考技术B 未序列化异常,你的序列化流所序列化的对象所属的类需要实现Serializable接口

腾讯地图关于限制地图的显示范围和缩放级别总结

这个可以在初始化地图的时候使用(有误求指出)

 // 先声明地图需要的变量
 var searchService,markers = [],lables = [],markerIndex=0,map,circles = [];
 //初始化地图函数  自定义函数名init
 function initMap(con) {
     //定义map变量 调用 qq.maps.Map() 构造函数   获取地图显示容器
     //center1为地图的中心点
     var center1 = new qq.maps.LatLng(xxx,yyy);

     //ne表示northeast东北方向的点,sw表示southwest西南方向的点
     var ne = new qq.maps.LatLng(31.156408,123.376465);
     var sw = new qq.maps.LatLng(26.125850,116.499023);
            
     map = new qq.maps.Map(document.getElementById(con), {
         center: center1, 
         //minZoom设置地图最小的缩放级别
         //maxZoom设置地图最大的缩放级别
         minZoom:8, 
         //boundary用来控制地图显示的范围
         //new qq.maps.LatLngBounds(southwest,northeast)
         boundary:new qq.maps.LatLngBounds(sw,ne);
         //zoom为地图目前的缩放级别
         zoom:9                                              
     });
    
     //调用Poi检索类
     searchService = new qq.maps.SearchService({
         map:map
     });

        ...
  }

总结:

1.限制地图的显示范围

一般导入地图之后,通过拖拽或者放大,能看到全世界。

如果想控制地图的范围,让地图即使进行拖拽或者缩放,显示的范围也是固定,

那么就要设置boundary值。(northeast:东北方向的点,southwest:西南方向的点)

...
boundary:new qq.maps.LatLngBounds(southwest,northeast)
...

2.限制缩放级别

通过设置minZoom(地图最小的缩放级别)和maxZoom(地图最大的缩放级别),

来控制地图的缩放。

以上是关于java.io.NotSerializableException:这是啥异常啊??????的主要内容,如果未能解决你的问题,请参考以下文章