Java RMI列表引用抛出“;InvalidClassException“;

Java RMI列表引用抛出“;InvalidClassException“;,java,rmi,Java,Rmi,我们目前正在实现一个基于RMI的小型聊天服务器 我们的客户机获取服务器实例并在服务器上注册自己 服务器应该存储对所有客户端的引用,这就是服务器将它们存储在列表中的原因 这就是问题所在。。。对于存储在服务器远程对象中的列表/集合/集合引用,我们总是会收到异常。而是使用原始数组。。。一切正常 这就是我们的小服务器 public类Main扩展了UnicastRemoteObject{ 受保护的Main()引发RemoteException{} 公共静态void main(字符串参数[]){ 试一试{

我们目前正在实现一个基于RMI的小型聊天服务器
我们的客户机获取服务器实例并在服务器上注册自己
服务器应该存储对所有客户端的引用,这就是服务器将它们存储在列表中的原因

这就是问题所在。。。对于存储在服务器远程对象中的列表/集合/集合引用,我们总是会收到异常。而是使用原始数组。。。一切正常

这就是我们的小服务器

public类Main扩展了UnicastRemoteObject{
受保护的Main()引发RemoteException{}
公共静态void main(字符串参数[]){
试一试{
LocateRegistry.createRegistry(Registry.Registry\u端口);
Naming.rebind(“ChatServer”,new ChatServerImpl());
while(true){}
}catch(异常e){System.out.println(“发生异常:+e.getMessage());}
}
下面是我们绑定为聊天服务器的类

公共类ChatServerImpl实现ChatServer{
public Set test=new HashSet();//如果没有此选项,它可以正常工作
@凌驾
公共布尔subscribeUser(ClientProxy句柄)引发RemoteException{
//添加客户端
返回true;
}
@凌驾
公共布尔取消订阅用户(ClientProxy句柄)引发RemoteException{
//删除客户端
返回true;
}
受保护的无效发送消息(字符串用户名、字符串消息){
System.out.println(“收到的消息:“+username+”“+Message”);
}
}
这将导致以下异常…

发生异常:服务器线程中发生RemoteException;嵌套异常为:
java.rmi.UnmarshallException:对参数进行解组时出错;嵌套异常为:
java.io.InvalidClassException:筛选器状态:已拒绝
进程已完成,退出代码为0
知道为什么会发生这种情况吗?我们如何防止这个问题?

摆脱
而(true)
。这简直是浪费时间。将注册表引用存储到静态变量中,您的
main()
将不会退出。