`
baiweiyll
  • 浏览: 28572 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

cmt——用java与flex来做C/S程序

阅读更多
cmt的项目背景:
cmt的实现原理:
cmt的基本开发过程:
               搞java已经3年了,感觉java的应用场景主要还是局限在b/s程序上面,因为用java来做C/S程序不仅比较麻烦,而且运行速度还很慢,与操作系统的界面外观格格不入。eclipse的swt运行速度比swing快得多,但是蹩脚的线程封装和繁琐的控件调用,让swt的界面开发工作变得非常的麻烦。

               因为工作的原因接触flex已经快一年了,虽然他的语法跟java比较起来不是那么的完美,但是每种语言都有它的长处,flex也不例外,用它来做界面开发,不仅开发速度快,界面美观,运行速度也很快,而且和与其他系统的整合也相当方便,毕竟flex编译出来的swf可以用flash activeX来播放,可以与任何支持activeX容器的平台集成。



              由于上面的原因,有了将flex与java平台集成于一体互相取长补短的想法,实现方便的互相调用,就像调用本地方法一样。当前基于

web service的flex库,可以让flex调用web service,实现对其他平台的调用,但是这种调用只是单向的,服务方不能调用flex,而且作为C/S程序分发和配置也相当繁琐。

              flex调用java:

                     将flex的本地对象串行化为对应的XML字符串,然后将此字符串通过套接字发送给java。java接收到字符串后解析此字符串,通过反射机制,将此字符串转换为对应的java对象,最后调用对应的方法。

             java调用flex:

                     与flex调用java类似

              好了废话不多说了,让我们来看看基本的开发步骤吧:)

              java方面:

               1:打开eclipse新建一java项目

               2:导入cmt.jar和dom4j.jar两个需要的库

                   



             flex方面:

               新建一web application 将cmt.swc库导入到此项目中      

                              图一:

                           



                             图二:







                            



flex调用java:

             1:在java项目中新建test.IvkTest类,作为服务类,具体代码如下:

              public class IvkTest {
  public String hello(String input){
      System.out.println(input);
      return "java的返回";
  }
  public static void main(String[] args) {
    ChannelFactory.init();
     while(true){
         try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     }
  }
}



         稍后flex会调用此类的hello方法,并传入相应的参数,同时此方法会返回一字符串,被flex显示出来。

         main方法在开始调用ChannelFactory类的静态init方法,打开数据访问通道,java与flex之间的数据传输就是通过此通道进行的。

         后面的while循环,阻止主线程的退出。

         2:在flex项目中新建test包,与java的IvkTest类所在的包对应

         3:在该包中新建IvkTest类(此类是java方IvkTest类的代理类,调用此类的方法时,它会去调用java的对应方法完成特定的功能,这种类在真正的项目中很多)

            该类的具体代码如下:

                   package test
{
    import org.communicator.DataChannelFactory;
    import org.communicator.server.BaseIvkServer;
   
    public class IvkTest extends BaseIvkServer          //所有的代理类都继承自BaseIvkServer类,它封装了具体的调用细节
    {
        public static var INSTANCE:IvkTest=new IvkTest();//为了模拟单列模式,所以在此创建了该类的静态字段
        public function IvkTest()
        {
        }

        /*

          此方法就是一个简单的代理方法,此方法被调用时,它会自动的去调用java的test.IvkTest类的hello方法,并按程序将args数组中的

          每个元素,做为hello方法的参数传入。java返回后,作为回调函数的resFun会被自动调用完成相应的功能。

          DataChannelFactory.DEFAULT_URL为数据通道的地址,这里取默认。

          args 为调用java方法时传入的参数,顺序与args数组中的顺序一致。

          */

        public function hello(str:String,resFun:Function):String{
            var args:Array=[str];
            this.sendRequest(DataChannelFactory.DEFAULT_URL,"hello",args,resFun);
            return null;
        }
    }
}

                          2:在flex项目中新建CmtTest.mxml Application  文件具体代码如下:

                             <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:initialize>
        <![CDATA[
            DataChannelFactory.CREATE_CHANNELS([new ChannelUrl("127.0.0.1",1236)]);
        ]]>
    </mx:initialize>
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import test.IvkTest;
            import org.communicator.ChannelUrl;
            import org.communicator.DataChannelFactory;
            function onClick():void{
                IvkTest.INSTANCE.hello("hello 我是flex",function ret(res:String):void{//ret方法的参数类型与test方法的返回类型相同
                    Alert.show(res);
                });
            }
        ]]>
    </mx:Script>
    <mx:Button label="ivkTest" click="onClick()"/>
</mx:Application>

                                首先在我们在Application初始化的时候调用DataChannelFactory.CREATE_CHANNELS([new ChannelUrl("127.0.0.1",1236)]);

                                连接上java方的数据通道。当按钮被点击后,onClick()方法会调用IvkTest类的hello方法,当java返回后,简单的Alert出java的返回。

java调用flex:

               这是最精彩的利用同一个数据通道,可以实现java与flex的互调,使java+flex做C/S程序成为可能。

               1:首先在flex的test包下新建服务类型IvkFlex,让java调用,具体代码如下:

                        package test
{
    import mx.controls.Alert;
   
    public class IvkFlex
    {
        public function IvkFlex()
        {
        }
        public function test(str:String):String{//稍后java会调用此方法,很简单不用多说。
            Alert.show(str);
            return 'flex的返回';
        }
    }
}



           2:在java中创建对应的代理类型(包名与类名称相同),代码如下:

                   package test;

import org.communicator.protocol.ChannelFactory;
import org.communicator.protocol.ClientTask;
import org.communicator.server.BaseIvkServer;

public class IvkFlex extends BaseIvkServer {//与flex的代理类类型,也要继承BaseIvkServer 类,实现方便的调用flex服务
   
    public IvkFlex() {
       
    }

   //代理方法,与flex的服务方法对应,名称相同
    public String test(String info){
        Object[] params=new Object[]{info};//调用flex方法时的输入参数
        ClientTask clientTask=this.sendMiddVal(ChannelFactory.DEFAULT_PORT, "test", params);
        return clientTask.retVal.toString();//ClientTask 类型为此此调用的任务对象,cmt会将此次调用的返回信息设置到它的retVal属性中
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        org.communicator.protocol.ChannelFactory.init();//打开数据通道
         String ret=new IvkFlex().test("flex你好我是java");//调用flex
         System.out.println(ret);//打印flex的返回信息


         while(true){//挂起主线程,防止线程的退出
             try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
         }
    }

}
分享到:
评论

相关推荐

    cmt 用java与flex来做C/S程序 java与flex互调利器

    实现java与flex像本地代码一样调用,当前版本为beta测试版, 在使用中,希望您提出宝贵的意见,我们将cmt做得更完善和完美, 通过QQ群:90636900可以 联系到作者

    在CMT上如何对Java Application调优

    本文将深入探讨如何在CMT架构下,通过调整JVM参数、优化多线程设计以及利用硬件特性来提升Java应用的性能。 ### CMT平台特性 CMT处理器能够同时执行大量线程,通过最小化等待延迟,显著提高了处理器的效率。Sun...

    cmt2300_fpga_control_控制程序

    文件“cmt2300_fpga_control_跳频.rar”和“cmt2300_fpga_control.rar”可能包含了与FPGA(Field Programmable Gate Array)相关的控制程序,这表明CMT2300A的某些功能或接口是由FPGA实现的。FPGA是一种可编程逻辑...

    EJB3实战——Java

    根据给定的信息,“EJB3实战——Java”,我们可以推断出这篇文章主要关注的是EJB(Enterprise JavaBeans)3的相关知识及其在Java企业级应用开发中的实际应用。下面将围绕EJB 3的基本概念、特点以及如何在实际项目中...

    CMT2300A_DemoEasy_v1.1实例程序stm32

    CMT2300A_DemoEasy_v1.1实例程序stm32 CMT2300A是一款数字模拟一体化收发机产品。该产品采用26MHz的晶体提供PLL的参考频率和数字时钟,同时支持OOK和(G)FSK的调制解调模式,并支持Direct和Packet两种数据处理模式...

    EJB高级——资源管理与EJB环境.rar_java ppt

    **EJB高级——资源管理与EJB环境** 在Java企业级开发中,Enterprise JavaBeans (EJB) 是一种核心组件,用于构建可扩展且可靠的分布式应用程序。本教程将深入探讨EJB中的资源管理和EJB环境,这对于理解如何高效地...

    AN135 CMT2119-2219ASampleCodeIntro-CN

    这些函数的定义和使用方式,对于理解如何通过MCU程序来控制CMT2119A模块至关重要。 配置流程部分描述了如何按照特定的步骤来配置CMT2119A模块。这包括了芯片复位的等待时间,以及如何正确地将16位宽的配置值写入...

    AN199-CMT2300A-CMT2119B-CMT2219B 射频频率计算指南_CN_V0.8.pdf

    【CMT2300A/CMT2119B/CMT2219B射频频率计算指南】是CMOSTEK公司提供的一份技术文档,主要针对这三款产品如何计算和配置射频频率进行了详细说明。这些产品涵盖了126.33到1020MHz的工作频率范围,支持(G)FSK和OOK调制...

    CMT2300A_Demo.zip_CMT2300A的GPIO_DEMO_cmt2300a_likelyxlb_stm32和cm

    【CMT2300A_Demo.zip】是一个包含CMT2300A芯片的GPIO(General Purpose Input/Output)演示程序的压缩文件。这个压缩包主要针对开发者,特别是那些使用KEIL集成开发环境和STM32F103微控制器的工程师。通过这个DEMO,...

    2380_cmt2380f32_CMT2380_

    《CMT2380单片机:开发环境构建与应用实例详解》 在嵌入式系统领域,CMT2380是一款广泛使用的高性能单片机,它以其高效的处理能力、丰富的外设接口和良好的性价比深受工程师们的青睐。本文将深入探讨CMT2380单片机...

    CMT2300_N76E003_8051_新唐_cmt2300a_n76e003_CMT2300

    对于开发者来说,掌握8051的中断服务程序设计、内存映射以及与外设的交互,是实现高效应用的关键。 此外,新唐科技的N76E003提供了丰富的开发工具和支持,包括IDE(集成开发环境)、仿真器和固件库等,这些工具极大...

    AN171-CMT2210LB-CMT2217LB-CMT2217B 使用指南-V0.3-180628.pdf

    **AN171-CMT2210LB-CMT2217LB-CMT2217B 使用指南** 本文档主要介绍了CMOSTEK公司的CMT2210LB、CMT2217LB和CMT2217B三款无线接收机的使用方法。这些器件属于NextGenRFTM系列,设计用于短距离无线通信,具有低功耗、...

    CMT4502_SDK_2.1.1_CMT4502SDK_

    CMT4502SDK,全称为"CMT4502 Software Development Kit",是专为CMT4502芯片设计的一整套开发工具,旨在帮助开发者高效地进行基于CMT4502芯片的应用程序开发。此SDK版本为2.1.1,代表了在该芯片应用开发领域的最新...

    CMT2300A + ST32F103ZE 例程

    在STM32F103ZE端,需要编写驱动程序来控制CMT2300A模块,这包括初始化配置、发送数据、接收数据等功能。 在“CMT2300A ST32F103ZE Evaluation board project”中,包含了实现这一无线通信功能的所有源代码、配置...

    AN1001-CMT211xA & CMT221xA通讯范例.pdf

    CMT211xA芯片型号包括CMT2110A和CMT2117A,为发射端芯片,而CMT221xA芯片型号包括CMT2210A和CMT2217A,为接收端芯片。它们使用OOK(On-Off Keying)调制技术,主要应用于433MHz和315MHz无线频率上,适用于智能家居...

    CMT2300A_Demo(STM32)V1.0.1.zip

    无线收发 cmt2300a +stm32程序源码

    CMT2110-17B-Ver0.1-20170907.pdf

    通过与CMT221x接收器配合,CMT2110/17B可以构建出极低成本的无线射频链接。 在功耗方面,CMT2110/17B在433.92MHz工作时的电流消耗仅为17.5mA,睡眠模式下的电流消耗更是低于20nA,这极大地延长了电池寿命,适用于对...

    AN198-CMT2300A-CMT2119B-CMT2219B 状态切换注意事项_CN_V0.8.pdf

    本文档是关于AN198-CMT2300A、CMT2119B、CMT2219B这三款芯片在进行状态切换时应注意的事项的详细介绍。首先,文档建议在阅读本文档前,先了解各芯片的基本使用方式,对应的文档是《AN142-CMT2300A快速上手指南》、...

    CMT2300实例开发指南

    CMT2300实例开发指南是一份面向初学者的文档,旨在帮助用户通过RF-EB主板和STM32F103芯片,使用Keil uVision V5开发环境快速实现CMT2300A无线模块的收发功能。文档详细介绍了如何进行软件配置、编程和测试以建立单向...

Global site tag (gtag.js) - Google Analytics