首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

smartinvoke入门系列六——让Flex实现事件回调与多线程

2012-09-07 
smartinvoke入门系列6——让Flex实现事件回调与多线程本质上来说事件回调也是属于Java调用Flex。前面的Java调

smartinvoke入门系列6——让Flex实现事件回调与多线程

本质上来说事件回调也是属于Java调用Flex。前面的Java调用Flex部分已经实现了该功能。但前面介绍的方式有些弊端:

在这里我们介绍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();

热点排行