Flex——HelloWorld

来源:互联网 发布:淘宝订单贷款预期 编辑:程序博客网 时间:2024/05/21 20:30

 原文:http://blog.csdn.net/kong_yajie/article/details/6729139

             http://blog.csdn.net/kong_yajie/article/details/6729577     

这一篇是关于Flex的入门HelloWorld,我们知道Flex有两种语言,Actionscript和MXML,下面分别说说AS 和 MXML的HelloWorld程序:

       ( PS:本人用的是Flash Builder 4.5 ,界面可能与Flex Development 有所不同,但方法步骤都大同小异~)

AS的HelloWorld

         第一步,新建一个AS的工程;

这里有很多可选项目,Flex项目中包含Flex框架,也就是可以编写AS、MXML程序,同时还包括一些辅助的类库,而AS项目仅仅只能编写AS的程序,区别就是这样。

这一步中,项目名自定,只要符合命名规则的都OK,然后就是项目位置,如果没有特殊需要,一般选择默认就可以了。

        这一步,项目已经建立好了,左方的包资源管理器里都是建立项目时系统自动生成的。src是源文件的文件夹,下一级是包,我的理解是:如果一个项目里有两个AS_HelloWorld.as,分别实现不同的功能,那么就像一个文件夹中有两个同名的文件一样会出错,这时我们可以新建两个文件夹,然后把这两个同名的文件分别放到这两个文件夹中,避免了同名错误。这里的包和文件夹是一个道理,事实上在程序里写一个包时在文件系统中就相应地新建了一个文件夹。每一个类都应该在一个package中。

        另外,大家可能也注意到,项目名、as文件名、类名、函数名都是AS_HelloWorld,它们是不是一定要相同呢?

        事实上,as中只要求了.as文件名要和其中的public的类名相同,也就是说一个.as文件对应一个类。项目名可以随意变化,而函数AS_HelloWorld只是AS_HelloWorld类的构造函数,所以也需要与类名相同。

注意,这个文档类必须为public 的。而辅助类则不能定义为public、private 的,必须是internal 的(或者不写类型和类型成员的访问修饰符。)。文档类必须继承自Sprite 或者MovieClip。因为这个文档类代表了这个swf,显然swf 是一个需要在屏幕上渲染显示(flash.display.DisplayObject)并提供资源承载能力(flash.display.InteractiveObject)的基础容器。

         第二步,向as文件添加代码;

         这一步中我们在类的构造函数中添加了一行用于输出的代码trace("HelloWorld!");,这样,在程序运行时,系统会自动调用类的构造函数,或者称之为程序的入口,运行这行代码。

package{import flash.display.Sprite;public class AS_HelloWorld extends Sprite{public function AS_HelloWorld(){trace("Hello World!");}}}

         第三步,调试程序,观察输出。

         注意,这时如果单击运行按钮,在控制台里是看不到输出的,而应该按调试按钮,因为trace只在debug模式下有效。如下图:

 

 MXML的HelloWorld

先来看看运行效果,界面好看了,不像AS中用控制台输出干涩的文字。

文件->新建Flex项目,输入项目名MXML_HelloWorld,配置不用管,直接单击完成 Done!

修改MXML_HelloWorld.mxml文件,如下:

    <?xml version="1.0" encoding="utf-8"?>      <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"                     xmlns:s="library://ns.adobe.com/flex/spark"                     xmlns:mx="library://ns.adobe.com/flex/mx"                     width="521" height="254" minWidth="955" minHeight="600">          <fx:Declarations>              <!-- 将非可视元素(例如服务、值对象)放在此处 -->          </fx:Declarations>          <s:Panel width="521" height="253" title="Welcome to Flex ">              <s:Label id="HelloWorld" x="197" y="68" width="128" height="55" fontSize="20"                       fontStyle="italic" fontWeight="bold"  text="HelloWorld!"/>          </s:Panel>                </s:Application>  
程序的第一行定义了XML版本。ISO-8859-1是大多数程序默认的格式,用户也可以使用utf-8编码格式,utf-8编码给出文件中每一个字符第一无二的编码。该编码与平台、程序和语言无关。代码中的第一行定义了使用utf-8编码格式。

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

下面是命名空间

1、xmlns:fx=”http://ns.adobe.com/mxml/2009″

        fx命名空间下包含ActionScript顶级元素内建到MXML编译器里的标签

        前者ActionScript顶级元素就是指 Object、Number、Boolean以及Array对象等等,在《Adobe Flex 4 Beta Language Reference》的顶级包(Top Level)里可以查看完整的顶级元素。后者内建到MXML编译器里的标签包括<fx:Script>、<fx:Declarations>和<fx:Style>等等,在《Adobe Flex 4 Beta Language Reference》附录(Appendixes)里的“MXML Only Tags”可以查看完整的编译器元素。值得注意的是,这个命名空间并不包含 Halo 和 Spark 组件(Halo是以前版本的组件库,而Spark是Flex 4新出的组件库)。在Flash Builder安装目录下可以找到“mxml-2009-manifest.xml”文件(例如我的电脑是C:\Program Files\Adobe\Flash Builder Beta\sdks\4.0.0\frameworks\mxml-2009-manifest.xml),这个xml文件描述了完整的ActionScript顶级类。不过你可以注意到,它并没有包含MXML编译器标签,那是因为这些标签是内建到MXML编译器。

2、xmlns:mx=”library://ns.adobe.com/flex/mx”

        mx命名空间包含着放在 mx.* 包里那些组件,Flex图表、Flex数据可视化组件等等。对Flex 3很熟悉的话,mx包里的组件你也不陌生了。在Flex 4 SDK的安装目录下可以找到“halo-manifest.xml”文件(例如我的电脑是C:\Program Files\Adobe\Flash Builder Beta\sdks\4.0.0\frameworks\halo-manifest.xml),这个XML文件列出了所有组件了。

3、xmlns:s=”library://ns.adobe.com/flex/spark”

        s命名空间可真是新鲜事了,spark.* 包里的组件都在这个命名空间里,不只spark包,flashx.*包的text framework类也在这个命名空间里。这个命名空间包含不少RPC类,例如 WebService、HTTPService和RemoteObject组件,这些组件同时也在mx命名空间下,也就是说,创建这些组件时,你不但可以使用“S:”前缀,也可以使用“mx:”前缀。其实不只这些RPC组件共用两个命名空间,像graphics、effect和state类也是共用 s 和 mx 命名空间的。在Flex 4 SDK安装目录下打开spark-manifest.xml文件来看看完整的spark组件吧。

 关于MXML的命名空间,推荐两个网址,便于学习:

http://www.w3school.com.cn/xml/xml_namespaces.asp(XML的命名空间)

http://wenku.baidu.com/view/9a73c93a376baf1ffc4fadc4.html(MXML的命名空间)


MXML的HelloWorld在运行时可能遇到如下类似错误:

SecurityError: Error #2148: SWF 文件 file:///F:/work2010/tiger/rmpublisher.air/bin-debug/index.swf 不能访问本地资源file:///F:/work2010/tiger/rmpublisher.air/bin-debug/plugins/plugins.xml。只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源。at flash.net::URLStream/load()at flash.net::URLLoader/load()at com.edlt.utils::Settings/loadSettings()

解决方法:
第一种:
flex项目上点右键-->properties-->ActionscriptCompiler-->Additional compiler arguments
加上“ -use-network=false ”,这种方式swf就无法访问网络资源了,比如socket通讯之类的。所以最好不要这样用。

第二种:
找到windows安装目录下system32/Macromed/Flash/FlashPlayerTrust,在这个目录下随便建个文本文件,在文件里输入需要访问本地资源flash的详细路径,保存。执行swf,不再出错了。OK
如:在C:/WINDOWS/system32/Macromed/Flash/FlashPlayerTrust目录下添加一个文件,比如:1.txt(文件名可任意起),文件内容为:“D:/demo/test/”即项目的路径,当然也可以设置为“D:/”。需要关闭浏览器这种设置才会生效,因为如果浏览器正在运行,Flash player 已经读取了FlashPlayerTrust的内容,新的设置不会生效。参考http://kb2.adobe.com/cps/518/cpsid_51814.html。

第三种:
如果让一个swf可被其他域访问,使用 flash.system.Security.allowDomain(),flash.system.Security.allowInsecureDomain()。参数设置为“*”可以让所有的域能够访问它。

第四种:
使用策略文件:内容可以是ip,域名,*。
<?xml version="1.0"?>
<!-- http://www.mydomain.com/crossdomain.xml -->
<cross-domain-policy>
<allow-access-from domain="www.otherdomain.com" />
<allow-access-from domain="*.adobe.com" />
<allow-access-from domain="123.45.67.89" />
<allow-access-from domain="*" />
</cross-domain-policy>
再使用 flash.system.Security.loadPolicyFile() 读取这个策略文件。这种方式是最灵活,最安全的方式。



原创粉丝点击