这是代码:
界面“通讯”
package itu.exercies.RMI.server; import java.rmi.Remote; import java.rmi.remoteexception; public interface ICommunication extends Remote { public String doCommunicate(String name) throws remoteexception; }
界面实现“CommunicationImpl”:
package itu.exercies.RMI.server; import java.rmi.remoteexception; import java.rmi.server.UnicastRemoteObject; public class CommunicationImpl extends UnicastRemoteObject implements ICommunication { /** * */ private static final long serialVersionUID = 1L; public CommunicationImpl() throws remoteexception { super(); } @Override public String doCommunicate(String name) throws remoteexception { return "Hello this is server,whats up " +name+ " ?!\n"; } }
这是我的主要服务器类“CommunicationServer”:
package itu.exercies.RMI.server; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.remoteexception; public class CommunicationServer { /** * @param args * @throws remoteexception * @throws MalformedURLException */ public static void main(String[] args) throws remoteexception,MalformedURLException { CommunicationImpl imp = new CommunicationImpl(); Naming.rebind("CommunicationImpl",imp); System.out.println("Server started..."); System.out.println("Object successfully registered. It is bound to the name 'CommunicationImpl'."); } }
这是我的客户端“CommunicationClient”:
package itu.exercies.RMI.client; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.remoteexception; import itu.exercies.RMI.server.CommunicationImpl; public class CommunicationClient { public static void main(String[] args) throws MalformedURLException,remoteexception,NotBoundException { String url = new String("rmi://localhost/CommunicationImpl"); CommunicationImpl comm = (CommunicationImpl)Naming.lookup(url); String reply = comm.doCommunicate("Wiktor"); System.out.println(reply); } }
现在我试图运行它:
>我使用终端导航到我的项目的bin目录
我从那里经营rmiregistry
>我从新的终端窗口运行我的CommunicationServer(它打印出的消息,使其似乎工作)
>我打开第三个终端窗口,当我尝试运行我的CommunicationClient时,它会抛出异常.
java itu.exercies.RMI.client.CommunicationClientException in thread “main” java.lang.classCastException: $Proxy0 cannot be cast to itu.exercies.RMI.server.CommunicationImpl
at itu.exercies.RMI.client.CommunicationClient.main(CommunicationClient.java:14)
到目前为止,我试图通过使用rmic创建一个“CommunicationImpl”对象的存根来修复它,但现在而不是’$Proxy0′,错误是指’CommunicationImpl_Stub’:
Exception in thread “main” java.lang.classCastException: itu.exercies.RMI.server.CommunicationImpl_Stub cannot be cast to itu.exercies.RMI.server.CommunicationImpl
at itu.exercies.RMI.client.CommunicationClient.main(CommunicationClient.java:14)
解决方法
CommunicationImpl comm = (CommunicationImpl) Naming.lookup(url);
同
ICommunication comm = (ICommunication) Naming.lookup(url);
CommunicationImpl是ICommunication的服务器实现.客户端既不知道也不关心实现,只有接口.
原文地址:https://www.jb51.cc/java/122765.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。