问题描述
我在写了一个很简单的测试程序,发现没有办法运行。请大家指点。代码如下:importjava.rmi.Remote;publicinterfaceSerInterfaceextendsRemote{}importjava.rmi.RemoteException;importjava.rmi.server.UnicastRemoteObject;publicclassServerImplextendsUnicastRemoteObjectimplementsSerInterface{privatestaticfinallongserialVersionUID=1L;publicServerImpl()throwsRemoteException{System.out.println("serverisstrating...");}publicvoidf(){System.out.println("aclientcall");}}importjava.rmi.Naming;importjava.rmi.registry.LocateRegistry;publicclassServer{publicstaticvoidmain(String[]args){System.out.println("aclientisstrating...");System.out.println("hello");try{LocateRegistry.createRegistry(1099);ServerImplsi=newServerImpl();System.out.println("bingingserver...");Naming.rebind("server",si);System.out.println("waitingforinvocationsfromclients...");}catch(Exceptione){e.printStackTrace();}}}importjava.rmi.Naming;publicclassClient{publicstaticvoidmain(String[]args){try{ServerImpls=(ServerImpl)Naming.lookup("server");s.f();}catch(Exceptione){e.printStackTrace();}}}java.lang.ClassCastException:$Proxy0cannotbecasttoServerImpl服务器可以跑起来,客户端是不行的。请问是什么原因呀?
解决方案
解决方案二:
你定义这远程接口下没写方法呀?接口里的每一个方法必须声明它将产生一个RemoteException异常应该把你的f()方法写里面抛异常importjava.rmi.Remote;publicinterfaceSerInterfaceextendsRemote{publicvoidf()throwsRomoteException;}我觉得现在应该可以了,不过我没法试。。。
解决方案三:
LZ你没结过帖??????????LZ你没结过帖??????????LZ你没结过帖??????????
解决方案四:
RMI现在几乎没人用了,不用刻意地去研究
解决方案五:
龙果兄:那现在分布式的啥比较流行?
解决方案六:
你需要使用rmi编译器编译你的实现类rmiccn.wzh.ServerImpl将会生成stub存根对象,也就是你的远程代理对象你在client端main方法应该使用接口调用SerInterfaces=(SerInterface)Naming.lookup("server");启动Server时,注意启动RMI服务器开始->运行->startrmiregistry