smartinvoke入门系列2——smartinvoke轻松上手



 简介:

本篇为smartinvoke开发系列的第一篇,主要让大家对smartinvoke有一个整体的认识,能够开发出简单独立的smartinvoke可运行桌面程序。

创建SmartInvoke项目:

依次选择Eclipse菜单栏中的 :文件 -> 新建 -> 其他 打开新建对话框,找到smartinvoke节点,选择New Project 节点,打开新建smartinvoke项目对话框,如下:

 

 

Project name 为项目名称;我们在这里输入:First

Main package 为项目入口类所在包名;我们在这里输入:cn.first

Class name 为项目入口类的类名称;我们在这里输入:FirstWin

 

输入完毕后点击完成,你会发现项目列表中新创建了两个项目,一个为Java类型项目,一个为Flex web application类型项目,结构如下图:




 
 

 

 

这两个项目构成了一个完整的smartinvoke项目First,它由Java类型项目FirstFlex类型项目First_构成。Flex项目名称由Java项目名称加下划线”_”构成。通过这种项目名称的约定规则,smartInvoke IDE 将这两个项目关联在一起了。

这样一来,当调试或运行First_项目的FirstWin.mxml时,eclipse 不再是调用本机浏览器加载对应的swf了,而是调用关联的Java项目的入口类cn.first. FirstWin加载该swf。这样就实现了smartinvoke项目的开发与调试。Java项目First中的cn.first. FirstWin类是整个smartinvoke项目的入口类,它的main方法最先由jre调用执行。同时该类还控制着程序首先加载的swf文件的路径,程序打开主窗口的样式等。

 

通过将一个smartinvoke项目分割为两个相互关联的Java类型项目与Flex项目构成,这样使得程序的功能分工更加明确,Java负责逻辑,Flex负责界面显示。JavaFlex通信细节交由smartinvoke 完成。这样可以大大提高开发效率与代码的复用率。

 

创建服务类型(Service Class Type)实现Flex调用Java

这里的服务类型即实现了cn.smartinvoke.IServerObject接口的Java类,通过smartinvoke,该类的public 方法可以被Flex直接访问到。

点击eclipse 工具栏上的图标

 
打开Create new smartinvoke type 对话框如下图所示:



 

 

 

点击完成后,会在First项目的cn.first包中新建一名称为ServiceTest的类。内容如下:

package cn.first;

 import cn.smartinvoke.IServerObject;

 import cn.smartinvoke.ide.declare.AServiceType;

 @AServiceType

 public class ServiceTest implements IServerObject {

 public ServiceTest() {

        //smarinvoke will call this default constructure.

 }

 public void gc(){

     //when this service object not be used smartinvoke call this method free memory.

 }

}

然后我们在ServiceTest类中添加一简单的方法供Flex调用,如下:

public String hello(String info){

     System.out.println(info);

     return "hello Flex I'm java";

 }

 

我们会发现在ServiceTest类的申明处添加了@AServiceType注解,该注解的作用是告诉eclipse 可以将该类翻译成Flex可以直接调用的as代码。只有标记了@AServiceType注解的类eclipse才将其翻译为对应的as代码,所以如果想自定义一些调用逻辑可以将该注解注释掉。我们可以在关联的Flex项目First_的对应源代码目录cn/first下发现ServiceTest.as类,内容如下:

 

package cn.first{

import cn.smartinvoke.RemoteObject;

[RemoteClass(alias="cn.first.ServiceTest")]

public class ServiceTest extends RemoteObject{

 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;

 }

}

}

 

细心观察下会发现ServiceTest.as类的方法与ServiceTest.java类的public 方法是一一对应的。

Flex调用ServiceTest.as类中的hello方法时,其实是去调用对应的ServiceTest.java服务类中的hello方法,并获得对应返回值。

所以我们把ServiceTest.as类叫做:代理类型(Remote Class Type)。所有的代理类都继承了cn.smartinvoke.RemoteObject类。

 

修改First_项目的FirstWin.mxml文件的内容如下:

<?xml version="1.0" encoding="utf-8"?>

<si:SIApplication xmlns:mx="http://www.adobe.com/2006/mxml"

     xmlns:si="http://smartinvoke.cn" creationComplete="init()"

     layout="absolute" fontSize="12">

     <mx:Script>

        <![CDATA[

            import cn.first.ServiceTest;

           

            import mx.controls.Alert;

           private function init():void{

               //创建对应的java服务类型对象         

               var serv:ServiceTest=ServiceTest.CreateInstance0();

               //调用java服务对象上的方法

               var res:String=serv.hello("Hello Java I'm Flex");

              

               Alert.show(res);

               //当我们不再使用该对象后,回收该服务对象的资源

               serv.gc();

           }

        ]]>

     </mx:Script>

</si:SIApplication>

       

和普通flex web applicationch程序运行方式一样,右键FirstWin.mxml将该文件运行为web应用程序就可以看到程序运行效果了。

细心的同学会发现这里的FirstWin.mxml并没有继承自mx.core.Application而是继承自:cn.smartinvoke.gui.SIApplicationSIApplication类,它封装了与Java通信的细节,使得SIApplication具有了访问Java对象的能力。在SmartInvoke中所有的窗口类都应该继承自SIApplication类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值