阅读:1619次   评论:0条   更新时间:2011-05-26    

本质上来说事件回调也是属于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();
 
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics