Flex动态加载swc和swf中的class
- 博客分类:
- 技术杂绘
flex中比较少人使用相关的反射,主要原因是因为avm编译模式,没办法做到java般的灵活的反射,那么就比较容易失去工厂模式的灵活的特性,但是flex也有相关反射,主要是用户swc和swf的反射,可以直接在内部提取class使用。
1、元数据捆绑问题
相信很多朋友也遇到相关问题 [Embed(source="resource/image/config/canvasLoading .gif" , mimeType="application/octet-stream")] public var _loadingGif:Class; 如果一个项目中捆绑过多元数据就会造成swf体积过大,但是往往也要面对一个需求,就是无需修改主要的flex源代码就可以修改嵌入文件的需求,那么用swc嵌入文件,再用flex动态加载swc是最好的办法了。
2、动态加载模块的问题
某些项目在前端的flex有可能动态加载某些模块的源代码,这些可能动态加载的UI、utils或者一些skin,放在动态加载的swc中也是一个比较好的解决方案;
3、Licence的动态加载
这个是我最常用的地方。
相关的用途就不描述那么多,如果有需要的朋友就可以找到优点了:
动态加载swc package com.shine.framework.Swc { import flash.display.Loader; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; import flash.utils.ByteArray; import mx.controls.Alert; import mx.core.UIComponent; import nochump.util.zip.ZipEntry; import nochump.util.zip.ZipFile; public class SwcManager extends UIComponent { //swc的路径 public var swcUrl:String=""; //library swf路径 public var libraryUrl:String=""; //加载完成的方法 public var method:Function; public function SwcManager(value:String=null,completeMethod:Functi on=null) { super(); if(value!=null){ this.swcUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } this.visible=false; } //加载swc public function loadSwc(value:String=null,completeMethod:Function= null):void{ if(value!=null){ this.swcUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } if(this.swcUrl!=null){ var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE,swcLoaded); loader.addEventListener(IOErrorEvent.IO_ERROR,erro r); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.load(new URLRequest(swcUrl)); }else{ Alert.show("不可以加载空的swc地址"); } } //加载swc完成 private function swcLoaded(e:Event):void { var byte:ByteArray = e.target.data; byte = swc2swf(byte); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.CO MPLETE,libReady); loader.contentLoaderInfo.addEventListener(IOErrorE vent.IO_ERROR,swfError); loader.loadBytes(byte,new LoaderContext(false,ApplicationDomain.currentDomai n)); } private function error(e:Event):void{ Alert.show("加载"+this.swcUrl+"失败"); } private function swfError(e:Event):void{ Alert.show("加载"+this.swcUrl+"swf失败"); } //加载library 完成 private function libReady(e:Event):void { if(method!=null) method.call(this); } //解压 public function swc2swf(byte:ByteArray):ByteArray { var zipFile:ZipFile = new ZipFile(byte); var zipEntry:ZipEntry = null; if(libraryUrl!=null&&libraryUrl.length!=0) zipEntry = zipFile.getEntry(libraryUrl); else zipEntry = zipFile.getEntry("library.swf"); return zipFile.getInput(zipEntry); } } } 使用教程
首先动态加载swc var swcManage:SwcManager =new SwcManager; swcManage.loadSwc("framework.swc",loadComplete); 其次实例化object private function loadComplete():void{ var o:Object=ReferenceUtil.referenceClass("Licence.fil e::LicenceFile"); } 获取到swc中的实例就可以非常容易做相关的操作;
另外附上动态加载swf源代码 package com.shine.framework.Swf { import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; import mx.controls.Alert; import mx.core.UIComponent; public class SwfManager extends UIComponent { //swc的路径 public var swfUrl:String=""; //加载完成的方法 public var method:Function; public function SwfManager(value:String=null,completeMethod:Functi on=null) { super(); if(value!=null){ this.swfUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } } //加载swf public function loadSwf(value:String=null,completeMethod:Function= null):void{ if(value!=null){ this.swfUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } if(this.swfUrl!=null){ var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.CO MPLETE ,swfLoaded); loader.load(new URLRequest(this.swfUrl)); }else{ Alert.show("不可以加载空的swc地址"); } } //加载swc完成 private function swfLoaded(e:Event):void { if(method!=null) method.call(this); } } }
发表评论
-
c语言中的字符数组与字符串
2012-07-06 09:51 8321、字符数组的定义 ... -
打造自己的正则表达式助手程序
2012-07-06 09:45 681原文地址:http://ire ... -
正则表达式
2012-07-06 09:37 707正则表达式 字 ... -
swing look and feel demo
2012-07-06 09:30 637more information : http://cid ... -
一个简单的仿sohu电视剧播放列表[脚本]
2012-07-05 20:45 597实例下载地址:http://download.csdn.n ... -
基于COM的轻量级组件技术的简单实现
2012-07-03 13:43 7750 引言 在软件开 ... -
PHP作为Flex程序的数据源
2012-07-02 10:28 544Adobe Flash Builder 4 简体中文正式版 ... -
Flex 遍历组件的实现
2012-07-02 10:28 659Flex有两个阵营组件:spark组件和mx组件,关于sp ... -
Flex + BlazeDS 学习笔记 (一) --- BlazeDS的功能原理及配置实例
2012-07-02 10:27 525BlazeDS Test Drive里面示例了主要的功能: ... -
java与flex通信
2012-07-02 10:27 614一、准备: 服务端:JDK1.5 (这个不用介绍了吧 ... -
Flex Image加载Servlet图像流处理
2012-07-01 00:04 405Image控件是Flex加载、显示图像的一个控件,当然其也 ... -
Flex初始化时加载外部XML
2012-07-01 00:04 674Flex初始化时加载外部XML配置文件 Flex项目 ... -
视频聊天网站的研究、发展以及趋势(转)
2012-07-01 00:03 486此文讲述了视频聊 ... -
视频聊天网站的研究、发展以及趋势(转) ...
2012-07-01 00:03 531此文讲述了视频文件聊天网站相干的技术、发展过程和将来的发展 ...
相关推荐
这是flex3引用的swc包,创建项目的时候用的,类似java的jar包。供大家参考使用,谢谢!
直接使用flex的sdk生成swc文件,很繁琐,而且对于大项目来说,是个头痛的事情。ant在对java打包生成jar时,它优良的设计显露无疑,这里我们使用它,来生成swc,完成项目编译打包。
NULL 博文链接:https://huagenli.iteye.com/blog/710475
flex解析json的swc包(entity-flex-v1-02)及例子
FLEX动态加载gif图形,需要的GifPlayer.swc,导入包,new gifplayer(),来使用
cairngorm.swc供需要的朋友急用
apahce flex sdk 4.14.1中提取的,请存放于{你的SDK}\frameworks\libs 文件夹内
Flex Mate框架swc包及Mate用法。
里面的swf 我自己用过 绝对没有问题 另外使用fusioncharts的朋友 也希望你们与我交流
apparat, optmize ABC,SWC和SWF文件的框架 Apparathttp://apparat.googlecode.com/Apparat is a framework to work with ABC, SWC and SWF files. You can use
flex 翻页效果swc包 例子代码 http://blog.csdn.net/xuhuanchao/archive/2009/11/12/4804276.aspx#1373163
FlexPaper的flex的swc文件,两个swc文件,引入flex工程便可以调用api。
flex更容易操作Excel,导入excel文件等操作
用这个包,你可以很快的给Flex3 VBox等添加上背景图片
在Flex应用中嵌入HTML代码或者网页,可以使用Iframe实现
flex反编译工具 ,对swf swc 文件进行反编译
hessian与flex交互,所以用到的swc包
flex amCharts图表的第三方工具包,希望能帮到大家。
这不是一本书,只是一个开发FLEX程序必需要用到的类库。
arcgis server9.3 flex swc