我目前正在使用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的异常。 在尝试运行程序之前,我通过执行
来安装rmiregistryrmiregistry &
在shell上。 我无法找出我做错了什么。 如果有人能提供帮助,那就太棒了
答案 0 :(得分:0)
您的代码存在问题,您需要导出远程对象
MethodsImp methods = new MethodsImp();
到rmi注册表。
您可以通过添加此代码
来实现MethodsImp methods=new MethodsImp();
Hello stub = (Hello) UnicastRemoteObject.exportObject(methods, 0);
Hello是接口的名称。
此代码将您的对象导出到注册表。如果要实现接口并在同一个类中绑定对象,则不需要导出对象。如果使用不同的类绑定对象,则还需要导出对象。