Deserialization 传输移动代理时出现奇怪的错误

Deserialization 传输移动代理时出现奇怪的错误,deserialization,agents-jade,Deserialization,Agents Jade,我已经为代理的移动性编写了一个代码。它可以很好地与一个 无线(通过路由器)链路 但当我与我朋友的笔记本电脑建立一个临时无线连接时,它失败了。这是我得到的错误: 2012年1月27日12:06:37 PM jade.core.mobility.AgentMobilityService$CommandSourceSi nk HandleInfo移动 严重:在目标容器上创建代理时出错。中止传输。输入输出接口 反序列化期间发生ror[嵌套的java.io.InvalidClassException:ja

我已经为代理的移动性编写了一个代码。它可以很好地与一个 无线(通过路由器)链路 但当我与我朋友的笔记本电脑建立一个临时无线连接时,它失败了。这是我得到的错误:
2012年1月27日12:06:37 PM jade.core.mobility.AgentMobilityService$CommandSourceSi
nk HandleInfo移动
严重:在目标容器上创建代理时出错。中止传输。输入输出接口
反序列化期间发生ror[嵌套的java.io.InvalidClassException:jade]
.core.Agent$1;本地类不兼容:stream classdesc serialVersionUID=-85
03980205419088695,本地类serialVersionUID=-6369687405671300436]
由于该程序在一个网络连接上运行良好,因此在不同计算机上的相同源和不同连接上失败

  • 这个错误意味着什么?如果在第一种情况下也出现了反序列化错误(如果有)
  • 连接类型(即临时连接)是问题的根源吗
  • 或者是因为代码,其中包括导致问题的文件访问命令(那么为什么它在第一种情况下工作)

  • 谢谢你的帮助

    我认为序列化对象的serialVersionUID与其他JVM上的类不同。为此,给出一些固定的长值。如果您使用的是eclipse,那么将生成的串行版本ID添加到实现Serializable的每个类中。清理并重新生成源代码。如果您只是使用命令行,请执行以下操作

    serialver "AgentClass"
    

    使用从中生成的值并重新编译源代码。

    我可以手动更改正在编译代理代码的计算机的SerialUID,如何更改未知目标主机的SerialUID?是否有任何java库允许我将serialUID自动设置为任何值?那么,如果我在分布式平台上分发代码,移动代理的目的是什么?还有其他方法吗?尽管不同主机上的容器可能不同,但您初始化了对应于同一代理类的代理对象,对吗?我认为存在一个通信缺口:我将按原样提出我的问题:我编写了一个移动代理代码,该代码移动到另一台PC上,并使用doMove在那里执行(目的地)。但是我得到这个serialversionUID错误,因为不同PC的serialversionUID是不同的。那么我有什么选择:1.从代码本身显式更改serialUID 2.手动更改所有PC的serialUID,这是一个更好的选择?为了解释整个过程,首先让我们假设AgentClass没有ID。什么时候调用doMove()时,AgentClass对象被序列化并加盖ID(一些随机ID)的戳记。在另一个JVM上,当它尝试反序列化AgentClass对象时,它将与用于反序列化的AgentClass进行比较。它可能是旧的或新的。如果它不匹配,则会出现错误。因此,最好的方法是至少第一次提供固定ID,无论AgentClass更改多少次,JVM都不会知道哎呀。因为ID保持不变。