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();
}
}
}
}
分享到:
相关推荐
实现java与flex像本地代码一样调用,当前版本为beta测试版, 在使用中,希望您提出宝贵的意见,我们将cmt做得更完善和完美, 通过QQ群:90636900可以 联系到作者
本文将深入探讨如何在CMT架构下,通过调整JVM参数、优化多线程设计以及利用硬件特性来提升Java应用的性能。 ### CMT平台特性 CMT处理器能够同时执行大量线程,通过最小化等待延迟,显著提高了处理器的效率。Sun...
文件“cmt2300_fpga_control_跳频.rar”和“cmt2300_fpga_control.rar”可能包含了与FPGA(Field Programmable Gate Array)相关的控制程序,这表明CMT2300A的某些功能或接口是由FPGA实现的。FPGA是一种可编程逻辑...
根据给定的信息,“EJB3实战——Java”,我们可以推断出这篇文章主要关注的是EJB(Enterprise JavaBeans)3的相关知识及其在Java企业级应用开发中的实际应用。下面将围绕EJB 3的基本概念、特点以及如何在实际项目中...
CMT2300A_DemoEasy_v1.1实例程序stm32 CMT2300A是一款数字模拟一体化收发机产品。该产品采用26MHz的晶体提供PLL的参考频率和数字时钟,同时支持OOK和(G)FSK的调制解调模式,并支持Direct和Packet两种数据处理模式...
**EJB高级——资源管理与EJB环境** 在Java企业级开发中,Enterprise JavaBeans (EJB) 是一种核心组件,用于构建可扩展且可靠的分布式应用程序。本教程将深入探讨EJB中的资源管理和EJB环境,这对于理解如何高效地...
这些函数的定义和使用方式,对于理解如何通过MCU程序来控制CMT2119A模块至关重要。 配置流程部分描述了如何按照特定的步骤来配置CMT2119A模块。这包括了芯片复位的等待时间,以及如何正确地将16位宽的配置值写入...
【CMT2300A/CMT2119B/CMT2219B射频频率计算指南】是CMOSTEK公司提供的一份技术文档,主要针对这三款产品如何计算和配置射频频率进行了详细说明。这些产品涵盖了126.33到1020MHz的工作频率范围,支持(G)FSK和OOK调制...
【CMT2300A_Demo.zip】是一个包含CMT2300A芯片的GPIO(General Purpose Input/Output)演示程序的压缩文件。这个压缩包主要针对开发者,特别是那些使用KEIL集成开发环境和STM32F103微控制器的工程师。通过这个DEMO,...
《CMT2380单片机:开发环境构建与应用实例详解》 在嵌入式系统领域,CMT2380是一款广泛使用的高性能单片机,它以其高效的处理能力、丰富的外设接口和良好的性价比深受工程师们的青睐。本文将深入探讨CMT2380单片机...
对于开发者来说,掌握8051的中断服务程序设计、内存映射以及与外设的交互,是实现高效应用的关键。 此外,新唐科技的N76E003提供了丰富的开发工具和支持,包括IDE(集成开发环境)、仿真器和固件库等,这些工具极大...
**AN171-CMT2210LB-CMT2217LB-CMT2217B 使用指南** 本文档主要介绍了CMOSTEK公司的CMT2210LB、CMT2217LB和CMT2217B三款无线接收机的使用方法。这些器件属于NextGenRFTM系列,设计用于短距离无线通信,具有低功耗、...
CMT4502SDK,全称为"CMT4502 Software Development Kit",是专为CMT4502芯片设计的一整套开发工具,旨在帮助开发者高效地进行基于CMT4502芯片的应用程序开发。此SDK版本为2.1.1,代表了在该芯片应用开发领域的最新...
在STM32F103ZE端,需要编写驱动程序来控制CMT2300A模块,这包括初始化配置、发送数据、接收数据等功能。 在“CMT2300A ST32F103ZE Evaluation board project”中,包含了实现这一无线通信功能的所有源代码、配置...
CMT211xA芯片型号包括CMT2110A和CMT2117A,为发射端芯片,而CMT221xA芯片型号包括CMT2210A和CMT2217A,为接收端芯片。它们使用OOK(On-Off Keying)调制技术,主要应用于433MHz和315MHz无线频率上,适用于智能家居...
无线收发 cmt2300a +stm32程序源码
通过与CMT221x接收器配合,CMT2110/17B可以构建出极低成本的无线射频链接。 在功耗方面,CMT2110/17B在433.92MHz工作时的电流消耗仅为17.5mA,睡眠模式下的电流消耗更是低于20nA,这极大地延长了电池寿命,适用于对...
本文档是关于AN198-CMT2300A、CMT2119B、CMT2219B这三款芯片在进行状态切换时应注意的事项的详细介绍。首先,文档建议在阅读本文档前,先了解各芯片的基本使用方式,对应的文档是《AN142-CMT2300A快速上手指南》、...
CMT2300实例开发指南是一份面向初学者的文档,旨在帮助用户通过RF-EB主板和STM32F103芯片,使用Keil uVision V5开发环境快速实现CMT2300A无线模块的收发功能。文档详细介绍了如何进行软件配置、编程和测试以建立单向...