You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的绑定名称是严格区分大小写的,客户端找不到对应名称的服务,自然就抛出了异常。

解决步骤

只需要把客户端的查找名称和服务器的绑定名称统一就行,二选一修改:

  1. 把客户端的lookup路径改成大写Server(推荐,保持和服务器一致)
  2. 把服务器的绑定名称改成小写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:19:08