问题1 已解决!
我对以下问题感到困惑,我正在为我的学校做一个有关Java中RMI的项目,并且在RMIRegistery中放置了一个对象
public static void bindObjectToRMIRegistry(Object obj,String name) throws AccessException, RemoteException {
System.out.println("<< IN ServerHelper.bindObjectToRMIRegistry() >>");
if(getRMIRegistru() != null) {
System.out.println("Binding to registry: "+getRMIRegistru().toString());
getRMIRegistru().rebind(name, (Remote) obj);
}else {
System.out.println("No registry to bind");
}
}
在日志中,我收到以下消息:
绑定到注册表:RegistryImpl_Stub [UnicastRef [liveRef: [端点: 192.168.56.1:9005 ,objID:[0:0:0,0]]]]
该端口是9005的好端口,但是IP并不是很好的端口,我没有 ideea他从哪里获得此IP。我还尝试为rmi设置主机 到我的本地主机 192.168.1.2 ,但它一直使用此地址 192.168.56.1:9005
配置中是否缺少某些内容?
问题2
Registry registery = LocateRegistry.getRegistry("192.168.1.2",9005);
IHello hi = (IHello) registery.lookup("HI");
我得到: RemoteException错误:错误解组返回;嵌套的异常是: java.lang.ClassNotFoundException:Interfaces.IHello(无安全管理器:禁用RMI类加载器)
答案 0 :(得分:1)
您最有可能拥有多个网络接口,例如LAN,WLAN,用于处理VM的虚拟机等。您可以通过运行ipconfig
(Windows)或ifconfig
(Linux)进行检查。
在绑定RMI时指定正确的IP。如果您有多个,Java将无法猜测您想要哪个:
Naming.rebind("//192.168.1.2/rmi", new RMI());