这只是一个测试,以了解Java RMI服务器的工作原理。如果我执行服务器并与RMI客户端通信,那么变量" data"应该在客户端远程调用getData()方法时更新。但相反,该程序继续打印"你好2"。这意味着变量未更新,可能是因为服务器在另一个进程上执行。有人可以澄清一下吗?
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.logging.Level;
import java.util.logging.Logger;
public class RMIServer extends UnicastRemoteObject implements RMIi{
public RMIServer() throws RemoteException{
super();
}
static String data = "Hello";
@Override
public String getData(String text) throws RemoteException {
data = "Hello 4";
return data;
}
public static void main (String[] args){
while(true) {
try{
data = "Hello 2";
Registry reg = LocateRegistry.createRegistry(1099);
reg.rebind("server", new RMIServer());
System.out.println("Server Started");
data = "Hello 3";
}
catch(Exception e){
System.out.println(e);
}
System.out.println(data);
}
}
}
答案 0 :(得分:2)
如果我执行服务器并与RMI客户端通信,则当客户端远程调用getData()方法时,应更新变量“data”。
正确。
但是程序会继续打印“你好2”。
什么节目?这里什么都没打印出来。但data
是“Hello 2”,因为main()
中存在无意义的循环。删除它。
这意味着变量未更新
不,不。这意味着你在一个无意义的循环中继续将它设置为该值,同时不断创建新的服务器实例。这里没有证据表明你已经执行了客户端。
可能是因为服务器是在另一个进程上执行的。
没有
NB data
不应该是静态的。