RMI客户端抛出java.rmi.NotBoundException错误但服务端运行正常求助
问题根因
你抛出java.rmi.NotBoundException的核心原因是客户端调用RMI注册中心的端口和服务端实际监听的端口不匹配:
- 服务端代码里你手动创建Registry用的是自定义端口
1076:Registry reg = LocateRegistry.createRegistry(1076); - 客户端
Naming.lookup的URL没指定端口,默认会访问RMI标准端口1099,自然找不到你注册的Service服务。
修复方案
两种改法任选一种即可:
方案1:修改客户端lookup的URL,加上服务端的自定义端口
把客户端initialize方法里的lookup代码改成:
myService = (LoginInterface) Naming.lookup("rmi://localhost:1076/Service");
方案2:把服务端Registry端口改成RMI默认端口1099
把服务端创建Registry的代码改成:
Registry reg = LocateRegistry.createRegistry(1099);
补充排查点(改完端口仍报错时可检查)
- 确认服务端启动后无报错,控制台成功打印
Service started. Welcome to the RMI Login Service! - 确认客户端和服务端依赖的
LoginInterface全限定类名完全一致,包名不能出错 - 启动顺序必须为先启服务端,再启客户端
内容的提问来源于stack exchange,提问作者Dark Load
相关产品推荐
相关产品推荐

