本质上来说事件回调也是属于Java调用Flex。前面的Java调用Flex部分已经实现了该功能。但前面介绍的方式有些弊端:
1. 导致Java逻辑代码与Flex接口部分代码结合的比较紧密,降低了代码的可维护性。
2. 程序调用的smartinvoke API比较多,代码的可移植性不高。
在这里我们介绍smartinvoke的事件回调机制,可以解决上面遇到的两个问题。
首先修改First项目中的cn.first.ServiceTest类,让其继承
cn.smartinvoke.gui.module.CObservable类,CObservable类封装了事件回调的实现细节。增加callbackTest方法模拟后台长时间任务,修改后内容如下:
package cn.first;
import cn.smartinvoke.gui.module.CObservable;
import cn.smartinvoke.ide.declare.AServiceType;
@AServiceType
public class ServiceTest extends CObservable {
public ServiceTest() {
//smarinvoke will call this default constructure.
}
public String hello(String info){
System.out.println(info);
return "hello Flex I'm java";
}
public void beanTest(BeanTest bean){
System.out.println(bean);
}
public void callbackTest(){
//创建并启动一个新线程模拟后台任务
Thread thread=new Thread(){
public void run(){
for(int i=0;i<10;i++){
System.out.println(i);
try {
Thread.sleep(800);
} catch (InterruptedException e) {
}
}
//当任务执行完毕后调用flex显示对应信息
ServiceTest.this.fireEvent("Task Finish");
}
};
thread.start();
}
public void gc(){
//when this service object not be used smartinvoke call this method free memory.
}
}
保存编译后你会发现First_项目中的ServiceTest.as文件也做了相应的修改,内容如下:
package cn.first{
import cn.smartinvoke.gui.module.CObservable;
import cn.first.BeanTest;
import cn.smartinvoke.RemoteObject;
[RemoteClass(alias="cn.first.ServiceTest")]
public class ServiceTest extends CObservable{
public static function CreateInstance0():ServiceTest{
var instance:ServiceTest=new ServiceTest();
instance.createRemoteObject(arguments);
return instance;
}
public function hello(info:String):String{
var ret:Object=this.call('hello',arguments);
return ret as String;
}
public function beanTest(bean:BeanTest):void{
this.call('beanTest',arguments);
}
public function callbackTest():void{
this.call('callbackTest',arguments);
}
}
}
Flex中通过以下代码就可以看到效果了。
//创建ServiceTest服务对象
var serv:ServiceTest=ServiceTest.CreateInstance0();
//添加事件监听器
serv.addListener(function(res:Object):void{
Alert.show(res+"");
},this);
//调用任务方法,启动后台线程
serv.callbackTest();
分享到:
相关推荐
### 通过SmartInvoke运用Java与Flex轻松构建CS程序 #### 概述 本文旨在介绍如何利用SmartInvoke技术结合Java和Flex构建高效的客户端-服务器(CS)应用程序。文章着重讲解了SmartInvoke的基础设置、项目创建流程及...
《SmartInvoke库与示例详解:Java/C#与Flex的桥梁》 在现代软件开发中,跨平台交互已经成为一个普遍需求。SmartInvoke库正是为了解决这个问题而诞生的,它提供了一种有效的方式,使得Flex界面API能够与Java或C#进行...
通常,C#与Flex之间的通信是通过ActionScript的ExternalInterface或SmartInvoke库来实现的。ExternalInterface是Flash Player提供的API,允许JavaScript与ActionScript之间通信;而SmartInvoke则是一个专门用于C#与...
让我们深入探讨这个主题。 Flash动画在过去的Web开发中扮演了重要角色,尤其是用于创建动态内容、互动式用户界面和游戏。在描述中提到的"Flash动画加代码",意味着该IDE支持将ActionScript(Flash的主要编程语言)...
KWDB 是一款面向 AIoT 场景的分布式多模数据库产品,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
做4.3这一节的时候的maple文件,仅供参考
stm32的实时时钟使用代码
基于go语言,使用gocv和socket实现摄像头视频传输项
jsoncpp不能正常解析,以及全角字符的问题,可以直接编辑使用.zip
在我们日常使用电脑的过程中,经常会遇到需要在不同网络环境下切换 IP 地址的情况。手动设置 IP 地址不仅繁琐,还容易出错。今天,我要向大家推荐一款超实用的网络管理工具 ——IP Switcher。 一、软件简介: IP Switcher 是一款功能强大的网络配置切换软件,它可以帮助用户在不同的网络环境下快速切换 IP 地址、子网掩码、网关、DNS 等网络设置,提高工作效率。 二、软件特点: 快速切换 IP Switcher 可以在几秒钟内完成网络配置的切换,无需手动设置 IP 地址、子网掩码、网关、DNS 等参数,大大节省了时间。 多种配置方案 用户可以根据不同的网络环境创建多个网络配置方案,每个方案可以设置不同的 IP 地址、子网掩码、网关、DNS 等参数。在需要切换网络环境时,只需选择相应的配置方案即可。 自动切换 IP Switcher 支持自动切换网络配置方案,可以根据用户设置的条件自动切换到相应的网络配置方案。例如,用户可以设置在连接到特定的无线网络时自动切换到相应的网络配置方案。 简单易用 IP Switcher 的界面简洁直观,操作非常方便。用户只需几个简单的步骤
tornado创建的一个web项目,实现了cookie,session,连接mysql和redis数据库,对主handler进行抽取,模拟登陆,图形化验证等一些功能业务_tornado_project.zip
mtk计算屏帧数的表格
fenlei20241031
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
爱心代码
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据