Java RMI本地开发时出现NotBoundException异常的解决方法求助
Java RMI本地开发时出现NotBoundException异常的解决方法求助
嘿,我帮你定位到问题啦!你遇到的应该是NotBoundException,核心原因是RMI服务绑定的名称大小写不匹配。
先看你的服务器代码,绑定服务时用的是大写的Server:
Naming.rebind("rmi://localhost:1099/Server", server);
但客户端查找服务时用的是小写的server:
EchoInterface objetEcho = (EchoInterface) Naming.lookup("rmi://localhost:1099/server"); SumInterface objetSum = (SumInterface) Naming.lookup("rmi://localhost:1099/server");
RMI的绑定名称是严格区分大小写的,客户端找不到对应名称的服务,自然就抛出了异常。
解决步骤
只需要把客户端的查找名称和服务器的绑定名称统一就行,二选一修改:
- 把客户端的lookup路径改成大写
Server(推荐,保持和服务器一致) - 把服务器的绑定名称改成小写
server
修改后的客户端代码示例:
public class MyClientRMI { public static void main(String[] args) { try { EchoInterface objetEcho = (EchoInterface) Naming.lookup("rmi://localhost:1099/Server"); SumInterface objetSum = (SumInterface) Naming.lookup("rmi://localhost:1099/Server"); System.out.println("Echo: " + objetEcho.echo("Hello World from RMI server")); System.out.println("Sum: " + objetSum.sum(5, 10)); } catch (Exception e) { System.out.println("Client failed: " + e); } } }
另外还有个小优化建议:因为MyServerRMI同时实现了两个接口,你没必要两次调用Naming.lookup,只需要 lookup 一次再分别强转即可,更高效:
MyServerRMI server = (MyServerRMI) Naming.lookup("rmi://localhost:1099/Server"); EchoInterface objetEcho = server; SumInterface objetSum = server;
这样修改后应该就能正常调用服务啦!
备注:内容来源于stack exchange,提问作者rayn
相关产品推荐
相关产品推荐

