JavaRMI对来自客户机本身和来自服务器的远程调用的客户机变量有不同的实例化

JavaRMI对来自客户机本身和来自服务器的远程调用的客户机变量有不同的实例化,java,scope,rmi,Java,Scope,Rmi,我们正在尝试使用javasrmi创建一个系统。问题在于,无法使用JavaRMI从服务器访问客户机上维护的列表。RMI连接似乎正在处理初始化列表的副本 下面是一个使用整数的最小示例,客户端每秒递增一个整数,直到它等于10。但服务器始终收到0 有人知道我们做错了什么吗 只需将服务器和客户端作为java应用程序运行即可 ServerDefaultImpl.java 包rmi; 导入java.rmi.RemoteException; 导入java.rmi.registry.LocateRegistry;

我们正在尝试使用javasrmi创建一个系统。问题在于,无法使用JavaRMI从服务器访问客户机上维护的列表。RMI连接似乎正在处理初始化列表的副本

下面是一个使用整数的最小示例,客户端每秒递增一个整数,直到它等于10。但服务器始终收到0

有人知道我们做错了什么吗

只需将服务器和客户端作为java应用程序运行即可

ServerDefaultImpl.java

包rmi;
导入java.rmi.RemoteException;
导入java.rmi.registry.LocateRegistry;
导入java.rmi.registry.registry;
导入java.rmi.server.UnicastRemoteObject;
公共类ServerDefaultImpl实现EIServerRemote,可运行{
远程客户端;
私有布尔运行=真;
公共服务器DefaultImpl(){
试一试{
LocateRegistry.createRegistry(Registry.Registry\u端口);
ServerDefaultImpl server=this;
EIServerRemote存根=(EIServerRemote)UnicastRemoteObject.exportObject(服务器,0);
Registry Registry=LocateRegistry.getRegistry();
注册表重新绑定(“测试”,存根);
}捕获(远程异常){
e、 printStackTrace();
}
新线程(this.start();
}
公共静态void main(字符串[]args){
新的ServerDefaultImpl();
}
@凌驾
公开募捐{
while(true==正在运行){
试一试{
睡眠(1000);
如果(null!=客户端){//客户端尚未连接。
int test=client.test();
系统输出打印LN(测试);
运行=测试
RMI连接似乎正在处理初始化列表的副本


没错。列表不是远程对象,因此它是通过序列化传递和返回的。

test
需要在客户端中具有易失性。仅通过添加volatile关键字似乎不起作用。正在尝试将其设为远程对象。在使用UnicastRemoteObject将其作为远程对象实现后,它正在工作。谢谢!