2009年6月 的存档

AS3动态获得类名及类的方法

电介质 发布于 2009年06月12日 星期五

获得某个实例对象的类:

实例名["constructor"];

实例名.constructor;

获得某个实例对象的类名:

getQualifiedClassName (对象实例名)

进一步解释如下

getQualifiedClassName (value:*)

参数value手册上说:可以将任何 ActionScript 值传递给此方法,包括所有可用的 ActionScript 类型、对象实例、原始类型(如 uint)和类对象。示例如下:

trace(getQualifiedClassName(“abc”));   //输出 String

trace(getQualifiedClassName(1));     //输出 int

trace(getQualifiedClassName(int));     //输出 int
trace(getQualifiedClassName(Sprite)); //输出 flash.display::Sprite
trace(getQualifiedClassName(自定义的类));//输出 带包路径的自定义类,类似上句输出,如果是在根包,或fla的库里定义的类,则因为在根路径则直接输出自定义类名,类似ActionScript的原始类型
trace(getQualifiedClassName(对象实例名));//参数可以是任何实例名,包括自定义类的实例,输出同上
trace(getQualifiedClassName(方法或函数名));//输出类似Function-20,builtin.as$0::MethodClosure

根据类名获得类:

getDefinitionByName(完全限定类名称的字符串表达式);

注意,这里的类名称需要有包路径的限定,如”flash.display.Sprite”,也可以这样写”flash.display::Sprite”,自定义的类也一样,当然如果自定义的类在根包,或是在fla的库里定义的类,或者是ActionScript的原始类型,则可以直接写类名字符串。

用得到的类实例化对象:

一般中间要用一个无类型变量传递类,进行实例化;

如:

var i=0;

var c:*=getDefinitionByName(“MyClass”+i);

var myClass:*=new c();


文章分类: AS3 ->2 条评论 »

Adobe AIR应用之帝国cms计划任务助手

电介质 发布于 2009年06月08日 星期一

Please upgrade your Flash Player This is the content that would be shown if the user does not have Flash Player 9.0.115 or higher installed.

帝国CMS有个计划任务功能,可以设置一些需要定时自动执行的任务,因为不能在后台直接运行,所以每天都要在浏览器里,登录打开运行计划任务,感觉比较繁琐,顺手用Adobe AIR做了个,只要设置好用户名,密码,和cms登录地址如“http://youcms/e/admin”,设置好运行起止区间,点登录运行即可;
另外还可以选中,每次启动系统自动运行;这样每次开机它会自动检测是否在计划的时间段内,然后自动运行,到时间就自动退出,如果不关机,到第二天还会按计划自动运行。
如果断网了,它也会在网络恢复后自动按计划运行。
东西很简单,没有做什么界面设计,只是实现了功能。有使用帝国cms计划任务的,可以试试,当然 基于Adobe air的应用都是跨平台的了(mac,windows,linux)。截图

文章分类: AIR ->3 条评论 »

Adobe AIR监测网络链接状态

电介质 发布于 2009年06月05日 星期五

Adobe AIR应用程序要实现根据网络是否连接,来处理相应的操作,查了下官方文档和手册,发现相关的内容如下:

检测网络连接更改

监听事件方法

NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetworkChange);

此事件只是确定网络连接的状态发生改变,而不能告诉你网络是否可用。要进一步确定网络的可用性还需要下面的类。

检测 HTTP 连接

实现方法

var monitor:URLMonitor;

monitor = new URLMonitor(new URLRequest(‘http://www.adobe.com’));

monitor.addEventListener(StatusEvent.STATUS, announceStatus);

monitor.start();

function announceStatus(e:StatusEvent):void {

    trace("Status change. Current status: " + monitor.available);

}

用于确定http链接是否可用,实际中还可以把URLRequest的请求方法设为HEAD,以避免下载整个页面。

通过实验发现,实际情况和文档里说的不一样,文档里说URLMonitor的pollInterval属性为0时(默认为0),则不定期轮询服务器,而仅在调用 start() 后和网络状态发生更改时立即轮询。但实际测试结果,当网络状态发生改变时,并不能触发状态改变事件,什么原因还不清楚。

最后的解决办法是,在上面的检测网络连接更改事件中创建URLMonitor实例并监听状态改变事件,然后调用start()方法,在状态改变事件里判断链接是否可用,进一步处理相关操作。实现代码如下:

private var monitor:URLMonitor;

NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetworkChange);

public function onNetworkChange(event:Event):void{

trace("网络连接发生改变");

//监视网络状态

var url:URLRequest=new URLRequest(“要监测的网络地址”);

url.method = "HEAD";

monitor = new URLMonitor(url);

monitor.addEventListener(StatusEvent.STATUS, onMonitor);

monitor.start();

}

private function onMonitor(event:Event):void
            {
                monitor.removeEventListener(StatusEvent.STATUS, onMonitor);
                trace("连接"+monitor.available);
                if(monitor.available){//网络连接可用

              //处理联网操作
                }
                else
                {
                     //网络连接不可用,相关处理
                }
            }

检测套接字连接

实现方法

socketMonitor = new SocketMonitor(‘www.adobe.com’,6667);

socketMonitor.addEventListener(StatusEvent.STATUS,socketStatusChange);

socketMonitor.start();

function announceStatus(e:StatusEvent):void {

   trace("Status change. Current status: " + socketMonitor.available);

}

没有实验。

文章分类: AIR ->发表评论 »