我正在创建我的第一个非常简单的RMI客户端 – 服务器应用程序.

这是代码:

界面“通讯”

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的服务器实现.客户端既不知道也不关心实现,只有接口.

java – “创建简单的RMI应用程序时,”ClassCastException:$Proxy0不能被转换“错误的更多相关文章

  1. java基于RMI远程过程调用详解

    这篇文章主要为大家详细介绍了java基于RMI远程过程调用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. RMI使用学习 小结

    四年前也是 Java  的 fans,也曾如火如荼的追求着 sun,追求着 java. 当然 RMI 肯定不会放过,但到目前为止还没有在任何一个项目中用过,昨天听了一个 java 老师的课,本来不去想听,可想想我交了这么多 money,最后还是去。最叫人恶心的是他讲的 RMI 一点实用价值都没有,而且有的理论也不对。真的误导人啊,学术理论和实践是不能够分离的,老师是这样的,只能靠学生自己动手丰衣足

  3. 为什么RMI注册表忽略了java.rmi.server.codebase属性

    我正在为javaRMI运行HelloWorld示例1)我在一个空文件夹中运行注册表2)我启动HTTP服务器以在运行时检索类.download文件夹包含客户端–服务器的远程接口3)我按照javaRMI教程的建议启动服务器传递java.rmi.server.codebase属性RMI注册表未联系HTTP服务器并抛出异常(请参阅问题后的详细信息).但如果我做以下事情1)使用java.rmi.server

  4. ubuntu – 首次启动Cassandra时出错

    我正在尝试在我的VPS上为学校项目设置一个单节点的Cassandra集群.所以我在Ubuntu16.04上安装了cassandra,但是当我运行时,我遇到了这个错误……

  5. 2015年的Java进程间通信(没有锅炉板)?

    我的用例:>process-1“数据库”,将1GB数据从数据文件加载到内存中>process-2“client”想要快速访问该数据而无需全部加载它们是在同一台机器上运行的独立进程.我想在进程之间传输的数据是包含原始类型的集合.我知道这可以通过打开socket-connect或通过RMI来完成.我们在15年前做过这两件事.现在没有人自动化这个,所以通过使用一些库你可以设置@InterProcessMethod并且能够在不同的JVM上调用方法而不必每次都实现序列化等等?

  6. Java:套接字还是RMI?

    我需要将我们的应用程序分成轻量级的gui应用程序和业务逻辑应用程序.这不是客户端/服务器设置,因为“服务器”组件只有一个客户端.应用程序的另一个限制是它只有一个入口/出口点.因此,如果我们使用RMI,它将只能在一个函数上.所有表单数据已经包装成一个字符串并通过一个传输区域.我应该只使用Java套接字来增强此应用程序,还是使用RMI?还是其他一些Java技术?

  7. Java:RMI与Web服务

    我需要创建一个由多个客户端组成的分布式应用程序,这些客户端将文件发送到一个服务器,还查询该服务器客户端必须从公司内部访问该Web服务器以发送文件.但是,有时候有些具体的查询必须在公司之外运行.我认为,鉴于我所知道的是,RMI是一种更快的方式来连接桌面客户端与索引引擎加上存储引擎.而且我认为,使Web服务为搜索引擎提供访问层也是一个很好的决定,因为它将在公司的网络之外运行.你怎么看待这件事?

  8. Java RMI – 客户端超时

    我正在使用JavaRMI构建分布式系统,它必须支持服务器丢失.如果我的客户端使用RMI连接到服务器,如果此服务器出现故障,我的客户端应该会收到异常,以便连接到其他服务器.但是当服务器停机时,我的客户端没有任何反应,他一直在等待回复.如何设置超时时间?解决方法对于套接字读取超时,可以这样设置自己的工厂,

  9. 在Java 9中是否有替代使用RMI的HTTP隧道?

    或者有没有办法将RMI保留在Java9中?找到一篇文章,其中建议其他实现,如SOCKS和套接字工厂.

  10. java – 当使用具有短暂端口的JMX服务器时,如何获取服务器端口号?

    使用以下选项启动Java应用程序时:Java使用临时端口,这对于避免冲突是非常有用的.是否可以从应用程序中以编程方式获取实际端口?解决方法这将打印URL

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部