RMI注册表失败....异常sais null

时间:2010-04-21 19:07:50

标签: java rmi

我目前正在使用rmi注册表来玩远程环境。我的服务器是这样的:

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;


public class Server {
    public static void main(String args[]){
        if(args.length");
            System.exit(-1);
        }     
        try{
            Registry r=LocateRegistry.getRegistry();
        MethodsImp methods=new MethodsImp();
            //have the object to be remotely accessed so will bind it to the registry
            System.out.println("Will register on "+args[0]);
           r.rebind(args[0], methods);
        }
        catch(Exception e){
            System.out.println("Something went wrong when registring the methods");
            System.out.println(e.getMessage());
            System.exit(-1);
        }

    }

}

当我通过以下方式运行程序时:

java -classpath /home/outsider/Desktop/RIM/RIM_TP1_correct/src -Djava.rmi.server.codebase=file:/home/outsider/Desktop/RIM/RIM_TP1_correct/src/ Server regsiter_name

我明白了:

Will register on regsiter_name
Something went wrong when registring the methods
null

出于某种原因,当我使用r.rebind时,它会抛出一条消息为null的异常。 在尝试运行程序之前,我通过执行

来安装rmiregistry
rmiregistry &

在shell上。 我无法找出我做错了什么。 如果有人能提供帮助,那就太棒了

1 个答案:

答案 0 :(得分:0)

您的代码存在问题,您需要导出远程对象

  

MethodsImp methods = new MethodsImp();

到rmi注册表。

您可以通过添加此代码

来实现
MethodsImp methods=new MethodsImp();
Hello stub = (Hello) UnicastRemoteObject.exportObject(methods, 0);

Hello是接口的名称。

此代码将您的对象导出到注册表。如果要实现接口并在同一个类中绑定对象,则不需要导出对象。如果使用不同的类绑定对象,则还需要导出对象。