﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-xiaomage234-随笔分类-flash</title><link>http://www.blogjava.net/xiaomage234/category/28294.html</link><description>生命本就是一次凄美的漂流，记忆中放不下的，永远是孩提时代的那一份浪漫与纯真！</description><language>zh-cn</language><lastBuildDate>Sun, 12 Feb 2012 01:56:19 GMT</lastBuildDate><pubDate>Sun, 12 Feb 2012 01:56:19 GMT</pubDate><ttl>60</ttl><item><title>Flash Builder 4.6 序列号</title><link>http://www.blogjava.net/xiaomage234/archive/2012/02/11/369800.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Sat, 11 Feb 2012 12:53:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/archive/2012/02/11/369800.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/369800.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/archive/2012/02/11/369800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/369800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/369800.html</trackback:ping><description><![CDATA[<div><div>Flash builder 4.6 序列号：</div><div></div><div>1424-4938-3077-5736-3940-5640</div><div>1424-4827-8874-7387-0243-7331</div><div>在host文件追加：</div><div></div><div>127.0.0.1 activate.adobe.com&nbsp;</div><div>127.0.0.1 practivate.adobe.com&nbsp;</div><div>127.0.0.1 ereg.adobe.com&nbsp;</div><div>127.0.0.1 activate.wip3.adobe.com&nbsp;</div><div>127.0.0.1 wip3.adobe.com&nbsp;</div><div>127.0.0.1 3dns-3.adobe.com&nbsp;</div><div>127.0.0.1 3dns-2.adobe.com&nbsp;</div><div>127.0.0.1 adobe-dns.adobe.com&nbsp;</div><div>127.0.0.1 adobe-dns-2.adobe.com&nbsp;</div><div>127.0.0.1 adobe-dns-3.adobe.com&nbsp;</div><div>127.0.0.1 ereg.wip3.adobe.com&nbsp;</div><div>127.0.0.1 activate-sea.adobe.com&nbsp;</div><div>127.0.0.1 wwis-dubc1-vip60.adobe.com&nbsp;</div></div>127.0.0.1 activate-sjc0.adobe.com&nbsp;<img src ="http://www.blogjava.net/xiaomage234/aggbug/369800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2012-02-11 20:53 <a href="http://www.blogjava.net/xiaomage234/archive/2012/02/11/369800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flexpaper源码的编译，去除logo和打印 【转】</title><link>http://www.blogjava.net/xiaomage234/archive/2012/02/11/369786.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Sat, 11 Feb 2012 04:10:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/archive/2012/02/11/369786.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/369786.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/archive/2012/02/11/369786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/369786.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/369786.html</trackback:ping><description><![CDATA[<div><p>1.首先下载FlexPaper的源码。<a href="http://files.cnblogs.com/yimiao/FlexPaper.rar" target="_blank">下载地址</a></p> <p>2.本人不懂flash，只是百度下，然后自己瞎弄弄的。我用的flash build 4.5</p> <p>提供个key：1499-4181-9296-6452-2998-3656</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010510474683.png" alt="" /></p> <p>首先在flash build中新建一个flex项目，第一步填写项目名称-flexpaper，第二步直接默认，最后一步需要注意下。</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010510504338.png" alt="" /></p> <p>选择合并到代码中，要不然你的bin-debug目录下面会出现很多其他的swf文件</p> <p>然后把你1步下载下来的源码解压。</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010510525924.png" alt="" /></p> <p>把这三个目录全部复制到你刚才建立的flex项目根目录下。最后结果是这样的：</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010510540618.png" alt="" /></p> <p>这时候打开src目录下面默认包下的flexpaper.mxml文件，加入如下代码，里面paper.swf是从pdf转换过来的，不懂的就看看我说flexpaper的文章。</p> <div> <pre>&lt;?xml version="1.0" encoding="utf-8"?&gt; <br />&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"   <br />                layout="absolute" <br />                width="100%" height="100%" <br />                xmlns:flexpaper="com.devaldi.controls.flexpaper.*"&gt; <br />    <br />    <br />    <br />    &lt;!--Scale为浏览文档的放大比率--&gt; <br />    &lt;flexpaper:FlexPaperViewer width="100%" height="100%"   <br />                               Scale="1.0" SwfFile="Paper.swf" /&gt; <br />    <br />&lt;/mx:Application&gt; </pre> </div> <p>然后点击项目的属性，将附加的编译参数修改成如下所示，-source-path=locale/{locale}</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010510570994.png" alt="" /></p> <p>&nbsp;</p> <p>我记得这些全部完成以后，好像有个文件一处会有错误，如果出错文件前面会有个红&#215;，找到它，然后把那句话去掉，就是一个属性设置。没什么影响。</p> <p>然后就可以run了。</p> <p>修改：</p> <p>1.右上角有一个FP，点击以后出现about</p> <p>找到如下所示的文件：</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010511015743.png" alt="" /></p> <p><br />打开，搜索bttnInfo，一共就三句，全部注释掉。然后在run，就会发现右上角的FP没了。（print也是在这个文件里面修改的，大家自己看看吧）</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010511042785.png" alt="" /></p> <p>2.修改右下角的logo，如下</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010511075554.png" alt="" /></p> <p>找到如下文件，打开，找到sizeChanged这个函数。把里面的两句话都注释掉就OK了。（虽然不懂，但是这些看看也都能知道个大概）</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010511104841.png" alt="" /></p> <p>好了。修改完毕。至于其他的修改，大家可以自己看看源文件。反正功能老外都帮我们现实了，我们只要修修改改而已。</p> <p>补充一点，如果想用，入下图：</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010511140391.png" alt="" /></p> <p>找到项目bin-debug下面的flexpaper.swf。（其他的swf就是我之前没有合并到代码中的那些swf，如果没有合并的需要把这些swf文件全部一起拷贝）</p> <p>放在你下载回来的例子中，替换如下：</p> <p><img src="http://pic002.cnblogs.com/images/2012/332739/2012010511154888.png" alt="" /></p> <p>把刚才的文件改成这个名字就OK了。然后在运行就会发现可以了。</p> <p>&nbsp;</p> <p>上面的方法似乎是把flash已经写死了，下面的这种方法编译出来的swf应该是可以动态加载flash的。（从网上找到的）</p> <div> <pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;  <br />&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" <br />                xmlns:fp="com.devaldi.controls.flexpaper.*" <br />                layout="absolute" width="100%" height="100%"   <br />                applicationComplete="initApp();"&gt;  <br />    <br />    &lt;mx:Script&gt;  <br />        &lt;![CDATA[  <br />            <span style="color: #0000ff;">import</span> mx.controls.Alert;  <br />            <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _aid = 0;<span style="color: #008000;">//</span><span style="color: #008000;">文档ID  </span><span style="color: #008000;"><br /></span>            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _Scale:<span style="color: #0000ff;">Number</span> = 1;<span style="color: #008000;">//</span><span style="color: #008000;">缩放比例  </span><span style="color: #008000;"><br /></span>            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _SwfFile:<span style="color: #0000ff;">String</span> = "";<span style="color: #008000;">//</span><span style="color: #008000;">SWF文件路径  </span><span style="color: #008000;"><br /></span>            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _ZoomTransition:<span style="color: #0000ff;">String</span> = "easeOut";  <br />            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _ZoomTime:<span style="color: #0000ff;">Number</span> = 0.6;  <br />            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _ZoomInterval:<span style="color: #0000ff;">Number</span> = 0.1;  <br />            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _FitPageOnLoad:<span style="color: #0000ff;">Boolean</span> = <span style="color: #0000ff;">false</span>;<span style="color: #008000;">//</span><span style="color: #008000;">加载后适合高度  </span><span style="color: #008000;"><br /></span>            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _FitWidthOnLoad:<span style="color: #0000ff;">Boolean</span> = <span style="color: #0000ff;">false</span>;<span style="color: #008000;">//</span><span style="color: #008000;">加载后适合宽度  </span><span style="color: #008000;"><br /></span>            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _PrintEnabled:<span style="color: #0000ff;">Boolean</span> = <span style="color: #0000ff;">true</span>;<span style="color: #008000;">//</span><span style="color: #008000;">是否支持打印  </span><span style="color: #008000;"><br /></span>            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _FullScreenAsMaxWindow:<span style="color: #0000ff;">Boolean</span> = <span style="color: #0000ff;">false</span>;<span style="color: #008000;">//</span><span style="color: #008000;">是否支付全屏  </span><span style="color: #008000;"><br /></span>            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _ProgressiveLoading:<span style="color: #0000ff;">Boolean</span> = <span style="color: #0000ff;">false</span>;<span style="color: #008000;">//</span><span style="color: #008000;">是否延迟加载  </span><span style="color: #008000;"><br /></span>            <br />            [Bindable]  <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">var</span> _localeChain:<span style="color: #0000ff;">String</span> = "zh_CN";<span style="color: #008000;">//</span><span style="color: #008000;">语言  </span><span style="color: #008000;"><br /></span>            <br />            <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">var</span> isFocus:<span style="color: #0000ff;">Boolean</span> = <span style="color: #0000ff;">false</span>;  <br />            <br />            <span style="color: #008000;">//</span><span style="color: #008000;">初始化参数  </span><span style="color: #008000;"><br /></span>            <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> initApp():void{  <br />                <span style="color: #0000ff;">var</span> params:<span style="color: #0000ff;">Object</span> = Application.application.parameters;  <br />                _Scale = getNumber(params, "Scale", 1);  <br />                _SwfFile = getString(params, "SwfFile", "Paper.swf");  <br />                _ZoomTransition = getString(params, "ZoomTransition", "easeOut");  <br />                _ZoomTime = getNumber(params, "ZoomTime", 0.6);  <br />                _ZoomInterval = getNumber(params, "ZoomInterval", 0.1);  <br />                _FitPageOnLoad = getBoolean(params, "FitPageOnLoad", <span style="color: #0000ff;">false</span>);  <br />                _FitWidthOnLoad = getBoolean(params, "FitWidthOnLoad", <span style="color: #0000ff;">false</span>);  <br />                _PrintEnabled = getBoolean(params, "PrintEnabled", <span style="color: #0000ff;">true</span>);  <br />                _FullScreenAsMaxWindow = getBoolean(params, "FullScreenAsMaxWindow", <span style="color: #0000ff;">false</span>);  <br />                _ProgressiveLoading = getBoolean(params, "ProgressiveLoading", <span style="color: #0000ff;">true</span>);  <br />                _localeChain = params["localeChain"];  <br />                <br />                <span style="color: #008000;">//</span><span style="color: #008000;">注册事件监听  </span><span style="color: #008000;"><br /></span>                this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);  <br />                this.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);  <br />                <br />                <span style="color: #008000;">//</span><span style="color: #008000;">开放给外部（javascript）调用  </span><span style="color: #008000;"><br /></span>                ExternalInterface.addCallback("hasFocus", hasFocus);  <br />                <span style="color: #008000;">//</span><span style="color: #008000;">ExternalInterface.addCallback("focus", focus);   </span><span style="color: #008000;"><br /></span>                ExternalInterface.addCallback("setViewerFocus", setViewerFocus);      <br />            }  <br />            <br />            <br />            <br />            <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> onMouseOver(event:MouseEvent):void{  <br />                this.isFocus = <span style="color: #0000ff;">true</span>;  <br />            }  <br />            <br />            <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> onMouseOut(event:MouseEvent):void{  <br />                this.isFocus = <span style="color: #0000ff;">false</span>;  <br />            }  <br />            <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> hasFocus():<span style="color: #0000ff;">Boolean</span>{  <br />                <span style="color: #008000;">//</span><span style="color: #008000;">Alert.show("hasFocus");  </span><span style="color: #008000;"><br /></span>                <span style="color: #0000ff;">return</span> isFocus;  <br />            }  <br />            <br />            <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> setViewerFocus(isFocus:<span style="color: #0000ff;">Boolean</span>):void{    <br />                <span style="color: #008000;">//</span><span style="color: #008000;">Alert.show("setViewerFocus");  </span><span style="color: #008000;"><br /></span>                this.paperViewer.setViewerFocus();  <br />            }  <br />            <br />            <span style="color: #008000;">/*</span><span style="color: #008000;">* <br />             *  <br />             * 获取String类型参数 <br />             * 如果没有，则返回默认值 <br />             *</span><span style="color: #008000;">*/</span> <br />            <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> getString(params:<span style="color: #0000ff;">Object</span>, name:<span style="color: #0000ff;">String</span>, def:<span style="color: #0000ff;">String</span>):<span style="color: #0000ff;">String</span>{  <br />                <span style="color: #0000ff;">if</span>(params[name] != <span style="color: #0000ff;">null</span>){  <br />                    <span style="color: #0000ff;">return</span> params[name];  <br />                }  <br />                <span style="color: #0000ff;">return</span> def;  <br />            }  <br />            <br />            <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> getNumber(params:<span style="color: #0000ff;">Object</span>, name:<span style="color: #0000ff;">String</span>, def:<span style="color: #0000ff;">Number</span>):<span style="color: #0000ff;">Number</span>{  <br />                <span style="color: #0000ff;">if</span>(params[name] != <span style="color: #0000ff;">null</span>){  <br />                    <span style="color: #0000ff;">return</span> params[name];  <br />                }  <br />                <span style="color: #0000ff;">return</span> def;  <br />            }  <br />            <br />            <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> getBoolean(params:<span style="color: #0000ff;">Object</span>, name:<span style="color: #0000ff;">String</span>, def:<span style="color: #0000ff;">Boolean</span>):<span style="color: #0000ff;">Boolean</span>{  <br />                <span style="color: #008000;">//</span><span style="color: #008000;">Alert.show("比较："+name);  </span><span style="color: #008000;"><br /></span>                <span style="color: #0000ff;">if</span>(params[name] != <span style="color: #0000ff;">null</span>){  <br />                    <span style="color: #0000ff;">return</span> params[name] == "true";  <br />                }   <br />                <span style="color: #0000ff;">return</span> def;  <br />            }  <br />        ]]&gt;  <br />    &lt;/mx:Script&gt;  <br />    &lt;!--mx:Panel x="165" y="76" width="250" height="200" layout="absolute" title="一个人"&gt;  <br />    &lt;mx:Label x="59" y="37" text="{Scale}" width="88"/&gt;  <br />    &lt;/mx:Panel--&gt;  <br />    <br />    &lt;fp:FlexPaperViewer id="paperViewer" <br />                        width="100%"   <br />                        height="100%"   <br />                        Scale="{_Scale}"   <br />                        SwfFile="{_SwfFile}"   <br />                        ZoomTransition="{_ZoomTransition}"   <br />                        ZoomTime="{_ZoomTime}"   <br />                        ZoomInterval="{_ZoomInterval}" <br />                        FitPageOnLoad="{_FitPageOnLoad}" <br />                        FitWidthOnLoad="{_FitWidthOnLoad}" <br />                        PrintEnabled="{_PrintEnabled}" <br />                        FullScreenAsMaxWindow="{_FullScreenAsMaxWindow}" <br />                        ProgressiveLoading="{_ProgressiveLoading}" /&gt;  <br />&lt;/mx:Application&gt;</pre> </div> <p><br />但是按照上述方法试了下，就无法调用官方提供的API接口了。原因是上述的程序并没有提供接口（接口在FlexPaperViewer_Base.mxml）这个文件中</p> <p>只需要加入如下的语句，就可以调用gotoPage接口了</p> <div> <pre><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> gotoPage(p:<span style="color: #0000ff;">Number</span>):void{<br />                paperViewer.gotoPage(p);<br />            }</pre> </div> <p>别忘了增加一句监听，给js调用</p> <div> <pre>ExternalInterface.addCallback("gotoPage", gotoPage);</pre> </div> 到此OK。编译出来的可以加载API了。</div><img src ="http://www.blogjava.net/xiaomage234/aggbug/369786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2012-02-11 12:10 <a href="http://www.blogjava.net/xiaomage234/archive/2012/02/11/369786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML Adobe AIR HelloWorld项目</title><link>http://www.blogjava.net/xiaomage234/archive/2011/07/22/354860.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Fri, 22 Jul 2011 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/archive/2011/07/22/354860.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/354860.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/archive/2011/07/22/354860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/354860.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/354860.html</trackback:ping><description><![CDATA[<div><span style="color: #333333; font-family: Arial; line-height: 26px; "><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">这里我们通过一个简单的</span><span style="font-family: 'Times New Roman'; ">HelloWorld</span><span style="font-family: 宋体; ">项目演示</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">项目的开发过程，本文演示的是在</span><span style="font-family: 'Times New Roman'; ">Windows</span><span style="font-family: 宋体; ">操作系统下，使用</span><span style="font-family: 'Times New Roman'; ">HTML</span><span style="font-family: 宋体; ">技术来开发</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">应用的过程，在不同操作系统下，使用不同的开发技术（比如：</span><span style="font-family: 'Times New Roman'; ">flash/flex</span><span style="font-family: 宋体; ">）开发过程可能会略有不同。</span></span></p><h2><span style="font-family: 黑体; "><span style="font-size: large; ">建立开发环境</span></span></h2><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">一个完整的</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">开发环境需要安装</span><span style="font-family: 'Times New Roman'; ">AirRuntime</span><span style="font-family: 宋体; ">、</span><span style="font-family: 'Times New Roman'; ">AirSDK</span><span style="font-family: 宋体; ">、</span><span style="font-family: 'Times New Roman'; ">JavaRuntime</span><span style="font-family: 宋体; ">，总体来说安装与配置过程还是比较简单的。其中</span><span style="font-family: 'Times New Roman'; ">AirRuntime</span><span style="font-family: 宋体; ">、</span><span style="font-family: 'Times New Roman'; ">JavaRuntime</span><span style="font-family: 宋体; ">的安装非常简单，我们只需要下载，并执行下载文件安装即可，和安装一个普通的应用程序没什么两样，下载地址：</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">AirRuntime</span><span style="font-family: 宋体; ">：</span><a href="http://get.adobe.com/cn/air/" style="color: #336699; text-decoration: none; "><span style="font-family: 'Times New Roman'; color: #0000ff; ">http://get.adobe.com/cn/air/</span></a></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">JavaRuntime</span><span style="font-family: 宋体; ">：</span><a href="http://www.java.com/zh_CN/" style="color: #336699; text-decoration: none; "><span style="font-family: 'Times New Roman'; color: #0000ff; ">http://www.java.com/zh_CN/</span></a></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">需要说一下的是</span><span style="font-family: 'Times New Roman'; ">AirSDK</span><span style="font-family: 宋体; ">的安装，首先我们要下载它：</span><a href="http://www.adobe.com/products/air/tools/sdk/" style="color: #336699; text-decoration: none; "><span style="font-family: 'Times New Roman'; ">http://www.adobe.com/products/air/tools/sdk/</span></a></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">下载后我们会得到一个</span><span style="font-family: 'Times New Roman'; ">AdobeAIRSDK.zip</span><span style="font-family: 宋体; ">文件，您可以将它解压到任何一个目录下，例如解压到&#8220;</span><span style="font-family: 'Times New Roman'; ">D:/AirSDK/</span><span style="font-family: 宋体; ">&#8221;。解压后只需要在</span><span style="font-family: 'Times New Roman'; ">path</span><span style="font-family: 宋体; ">环境变量中加入&#8220;</span><span style="font-family: 'Times New Roman'; ">D:/AirSDK/bin</span><span style="font-family: 宋体; ">&#8221;。这样，我们的开发环境就搭建好了，下面让我们来开发应用程序吧。</span></span></p><h2><span style="font-family: 黑体; "><span style="font-size: large; ">编写应用程序</span></span></h2><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">每一个</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">应用都需要一个应用程序配置文件（以下称为：项目描述文件），这个文件使用</span><span style="font-family: 'Times New Roman'; ">XML</span><span style="font-family: 宋体; ">格式，用于配置项目相关的信息，比如程序入口，初始窗体的一些设置等。</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">运行时框架也是通过此文件才能得知应用程序的入口信息。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">在这个程序配置文件中我们可以指定应用程序入口</span><span style="font-family: 'Times New Roman'; ">HTML</span><span style="font-family: 宋体; ">文件，这样，我们就可以通过这个</span><span style="font-family: 'Times New Roman'; ">HTML</span><span style="font-family: 宋体; ">文件来开启</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">应用之旅。下面我们将制作一个</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">应用，整个应用由&#8220;</span><span style="font-family: 'Times New Roman'; ">application.xml</span><span style="font-family: 宋体; ">&#8221;、&#8220;</span><span style="font-family: 'Times New Roman'; ">HelloWorld.html</span><span style="font-family: 宋体; ">&#8221;两个文件组成。我们先来看看项目描述文件。</span></span></p><h3><span style="font-family: 宋体; "><span style="font-size: large; ">创建项目描述文件</span></span></h3><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">我们先来建立一个目录来存放</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">应用的文件，比如：&#8220;</span><span style="font-family: 'Times New Roman'; ">D:/airApps/HelloWorld</span><span style="font-family: 宋体; ">&#8221;。在</span><span style="font-family: 'Times New Roman'; ">HelloWorld</span><span style="font-family: 宋体; ">建立一个</span><span style="font-family: 'Times New Roman'; ">application.xml</span><span style="font-family: 宋体; ">文件，其内容如下：</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;application xmlns="http://ns.adobe.com/air/application/1.5"&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;id&gt;com.keda.examples.HelloAir&lt;/id&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;version&gt;0.1&lt;/version&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;filename&gt;HelloAir&lt;/filename&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;initialWindow&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; "><span style="font-size: small; "><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;content&gt; HelloWorld.html&lt;/content&gt;</span></span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; "><span style="font-size: small; "><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;visible&gt;true&lt;/visible&gt;</span></span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; "><span style="font-size: small; "><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;width&gt;400&lt;/width&gt;</span></span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; "><span style="font-size: small; "><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;height&gt;200&lt;/height&gt;</span></span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;/initialWindow&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;/application&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 宋体; "><span style="font-size: small; ">简单解释一下：</span></span></p><p style="line-height: 21px; text-indent: -21pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 38.95pt; "><span style="font-family: 'Times New Roman'; "><strong><span><span style="font-size: small; ">1.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></strong><strong><span style="font-size: small; ">&lt;application&gt;&nbsp;</span></strong></span><span style="font-size: small; "><strong><span style="font-family: 宋体; ">元素，包括</span><span style="font-family: 'Times New Roman'; ">&nbsp;AIR&nbsp;</span></strong><strong><span style="font-family: 宋体; ">命名空间属性：</span></strong></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">&lt;application xmlns="http://ns.adobe.com/air/application/1.5"&gt;&nbsp;</span><span style="font-family: 宋体; ">该命名空间的最后一部分&#8220;</span><span style="font-family: 'Times New Roman'; ">1.5</span><span style="font-family: 宋体; ">&#8221;</span>&nbsp;<span style="font-family: 宋体; ">指定了应用程序所需的运行时版</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 宋体; "><span style="font-size: small; ">本。</span></span></p><p style="line-height: 21px; text-indent: -21pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 38.95pt; "><span style="font-family: 'Times New Roman'; "><strong><span><span style="font-size: small; ">2.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></strong><strong><span style="font-size: small; ">&lt;id&gt;&nbsp;</span></strong></span><strong><span style="font-size: small; "><span style="font-family: 宋体; ">元素：</span></span></strong></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">&lt;id&gt;examples.html.HelloWorld&lt;/id&gt;&nbsp;</span><span style="font-family: 宋体; ">应用程序</span><span style="font-family: 'Times New Roman'; ">&nbsp;ID&nbsp;</span><span style="font-family: 宋体; ">与发布者</span><span style="font-family: 'Times New Roman'; ">&nbsp;ID&nbsp;</span><span style="font-family: 宋体; ">（</span><span style="font-family: 'Times New Roman'; ">AIR&nbsp;</span><span style="font-family: 宋体; ">从对应用程序包进行签名时使用的证书中获取）一起</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">可以标识唯一的应用程序。建议采用的形式为以点分隔的反向</span><span style="font-family: 'Times New Roman'; ">&nbsp;DNS&nbsp;</span><span style="font-family: 宋体; ">样式的字符串，如</span><span style="font-family: 'Times New Roman'; ">&nbsp;"com.company.AppName"</span><span style="font-family: 宋体; ">。应用程</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">序</span><span style="font-family: 'Times New Roman'; ">&nbsp;ID&nbsp;</span><span style="font-family: 宋体; ">可用于安装、访问专用应用程序文件系统存储目录、访问专用加密存储以及应用程序间的通信。</span></span></p><p style="line-height: 21px; text-indent: -21pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 38.95pt; "><span style="font-family: 'Times New Roman'; "><strong><span><span style="font-size: small; ">3.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></strong><strong><span style="font-size: small; ">&lt;version&gt;&nbsp;</span></strong></span><strong><span style="font-size: small; "><span style="font-family: 宋体; ">元素：</span></span></strong></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">&lt;version&gt;0.1&lt;/version&gt;&nbsp;</span><span style="font-family: 宋体; ">可帮助用户确定安装哪个版本的应用程序。</span></span></p><p style="line-height: 21px; text-indent: -21pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 38.95pt; "><span style="font-family: 'Times New Roman'; "><strong><span><span style="font-size: small; ">4.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></strong><strong><span style="font-size: small; ">&lt;filename&gt;&nbsp;</span></strong></span><strong><span style="font-size: small; "><span style="font-family: 宋体; ">元素：</span></span></strong></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">&lt;filename&gt;HelloWorld&lt;/filename&gt;&nbsp;</span><span style="font-family: 宋体; ">用于操作系统中应用程序可执行文件、安装目录和对应用程序的其它引用的名称。</span></span></p><p style="line-height: 21px; text-indent: -21pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 38.95pt; "><strong><span><span style="font-family: 'Times New Roman'; "><span style="font-size: small; ">5.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></span></strong><span style="font-size: small; "><strong><span style="font-family: 宋体; ">包含下列子元素的</span><span style="font-family: 'Times New Roman'; ">&nbsp;&lt;initialWindow&gt;&nbsp;</span></strong><strong><span style="font-family: 宋体; ">元素，为初始应用程序窗口指定属性：</span></strong></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">&lt;content&gt;HelloWorld.html&lt;/content&gt;&nbsp;</span><span style="font-family: 宋体; ">标识</span><span style="font-family: 'Times New Roman'; ">&nbsp;AIR&nbsp;</span><span style="font-family: 宋体; ">要加载的根</span><span style="font-family: 'Times New Roman'; ">&nbsp;HTML&nbsp;</span><span style="font-family: 宋体; ">文件。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">&lt;visible&gt;true&lt;/visible&gt;&nbsp;</span><span style="font-family: 宋体; ">使窗口立即可见。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">&lt;width&gt;400&lt;/width&gt;&nbsp;</span><span style="font-family: 宋体; ">设置窗口宽度（以像素为单位）。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">&lt;height&gt;200&lt;/height&gt;&nbsp;</span><span style="font-family: 宋体; ">设置窗口高度。</span></span></p><h3><span style="font-size: large; "><span style="font-family: 宋体; ">创建入口</span><span style="font-family: 'Times New Roman'; ">HTML</span><span style="font-family: 宋体; ">页面</span></span></h3><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">新建&#8220;</span><span style="font-family: 'Times New Roman'; ">HelloWorld.html</span><span style="font-family: 宋体; ">&#8221;内容如下：</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;html&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;head&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;title&gt;Hello World&lt;/title&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;/head&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;body &gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;h1&gt;Hello World&lt;/h1&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;/body&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">&lt;/html&gt;</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">HTML</span><span style="font-family: 宋体; ">很简单，这里不多说了。到这里我们的</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">应用就编写完成了，下面让我们调试运行一下。</span></span></p><h2><span style="font-size: large; "><span style="font-family: 黑体; ">调试运行</span><span style="font-family: Arial; ">Air</span><span style="font-family: 黑体; ">应用</span></span></h2><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">在</span><span style="font-family: 'Times New Roman'; ">Dos</span><span style="font-family: 宋体; ">命令行下进入&#8220;</span><span style="font-family: 'Times New Roman'; ">D:/airApps/HelloWorld</span><span style="font-family: 宋体; ">&#8221;，然后使用</span><span style="font-family: 'Times New Roman'; ">adl</span><span style="font-family: 宋体; ">命令进行高度。命令如下：</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">adl application.xml</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 宋体; "><span style="font-size: small; ">看看运行结果：</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 宋体; "><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yneos/EntryImages/20091215/image001.png" alt="" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">&nbsp;</p><h2><span style="font-family: 黑体; "><span style="font-size: large; ">打包和分发</span></span></h2><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">在</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">应用打包之前需要</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">的证书，</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">证书有两种，一种是</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">颁发的，另一种是自签名证书，这种证书我们可以直接通过命令行生成并使用，自签名证书打包的应用在安装时不会显示机构名称，如下图所示：</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; "><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yneos/EntryImages/20091215/image003.png" alt="" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">&nbsp;</p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 宋体; "><span style="font-size: small; ">但作为学习自签名证书还是比较适用的，下面简介一下自签名证书的生成。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">&nbsp;</p><h3><span style="font-family: 宋体; "><span style="font-size: large; ">生成证书</span></span></h3><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">命令格式说明：</span><span style="font-family: 'Times New Roman'; ">adt -certificate -cn name [-ou org_unit][-o org_name][-c country] key_type pfx_file password</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">-cn name&nbsp;</span><span style="font-family: 宋体; ">分配的作为新证书公共名称的字符串。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">-ou org_unit&nbsp;</span><span style="font-family: 宋体; ">分配的作为证书颁发组织单位的字符串。（可选。）</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">-o org_name&nbsp;</span><span style="font-family: 宋体; ">被分配作为证书颁发组织的字符串。（可选。）</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">-c country&nbsp;</span><span style="font-family: 宋体; ">双字母</span><span style="font-family: 'Times New Roman'; ">&nbsp;ISO-3166&nbsp;</span><span style="font-family: 宋体; ">国家</span><span style="font-family: 'Times New Roman'; ">/&nbsp;</span><span style="font-family: 宋体; ">地区代码。如果提供的代码无效，则不会生成证书。（可选。）</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">key_type&nbsp;</span><span style="font-family: 宋体; ">用于证书的密钥类型，即&#8220;</span><span style="font-family: 'Times New Roman'; ">1024-RSA</span><span style="font-family: 宋体; ">&#8221;</span>&nbsp;<span style="font-family: 宋体; ">或&#8220;</span><span style="font-family: 'Times New Roman'; ">2048-RSA</span><span style="font-family: 宋体; ">&#8221;。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">pfx_file&nbsp;</span><span style="font-family: 宋体; ">证书文件的生成路径。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">password&nbsp;</span><span style="font-family: 宋体; ">新证书的密码。当使用此证书对</span><span style="font-family: 'Times New Roman'; ">&nbsp;AIR&nbsp;</span><span style="font-family: 宋体; ">文件签名时需要提供密码。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 宋体; "><span style="font-size: small; ">例如本程序证书使用以下命令生成：</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">adt -certificate -cn HelloWorld -ou it.kedacom.com -o KEDACOM 2048-RSA HelloWorld.p12 kedacom</span></p><h3><span style="font-family: 宋体; "><span style="font-size: large; ">打包分发</span></span></h3><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 宋体; "><span style="font-size: small; ">证书生成之后我们就可以进行打包了，</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 'Times New Roman'; font-size: small; ">adt &#8211;package -tsa none -storetype pkcs12 -keystore HelloWorld.p12 HelloWorld.air application.xml HelloWorld.html</span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">系统将提示您输入生成证书时的密码：</span><span style="font-family: 'Times New Roman'; ">kedacom</span><span style="font-family: 宋体; ">。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">HelloWorld.air&nbsp;</span><span style="font-family: 宋体; ">参数表示</span><span style="font-family: 'Times New Roman'; ">&nbsp;ADT&nbsp;</span><span style="font-family: 宋体; ">生成的</span><span style="font-family: 'Times New Roman'; ">&nbsp;AIR&nbsp;</span><span style="font-family: 宋体; ">文件。</span><span style="font-family: 'Times New Roman'; ">HelloWorld-app.xml&nbsp;</span><span style="font-family: 宋体; ">表示应用程序描述符文件。后面的参数表示应</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 宋体; "><span style="font-size: small; ">用程序所使用的文件。此示例仅使用了两个文件，但可以包含任意数量的文件和目录。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">至此，我们的应用就已经完成了，您可以通过双击生成的</span><span style="font-family: 'Times New Roman'; ">.air</span><span style="font-family: 宋体; ">安装包来安装我们的应用。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 宋体; ">用命令行工具进行打包还是比较繁琐的，推荐使用</span><span style="font-family: 'Times New Roman'; ">Aptana Studio</span><span style="font-family: 宋体; ">来开发</span><span style="font-family: 'Times New Roman'; ">Air</span><span style="font-family: 宋体; ">应用，项目创建、证书的生成、打包都有图形化工具可以使用。</span></span></p><p style="line-height: 21px; text-indent: 17.95pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: small; "><span style="font-family: 'Times New Roman'; ">Aptana Studio</span><span style="font-family: 宋体; ">下载地址：</span><a href="http://www.aptana.org/studio/download" style="color: #336699; text-decoration: none; "><span style="font-family: 'Times New Roman'; color: #0000ff; ">http://www.aptana.org/studio/download</span></a></span></p></span></div><img src ="http://www.blogjava.net/xiaomage234/aggbug/354860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2011-07-22 16:39 <a href="http://www.blogjava.net/xiaomage234/archive/2011/07/22/354860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex 开发入门</title><link>http://www.blogjava.net/xiaomage234/archive/2011/04/25/348972.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Mon, 25 Apr 2011 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/archive/2011/04/25/348972.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/348972.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/archive/2011/04/25/348972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/348972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/348972.html</trackback:ping><description><![CDATA[<p sizset="75" sizcache="22"><a name="N10047"><span class="atitle">开始之前</span></a></p>
<p>Flex 作为富 Internet 应用（RIA）时代的新技术代表，自从 2007 年 Adobe 公司将其开源以来，Flex 就以前所未有的速度在成长。很多公司，包括 IBM 都纷纷加入了 Flex 开发的阵营当中。很多开发人员也按捺不住 Flex 的&#8220;诱惑&#8221;而准备从事 Flex 开发。本文主要讲述 Flex 开发的基础知识，主要是关于开发环境的搭建，以及介绍简单的 Flex 项目创建、编码、调试以及部署的过程和 Flex 编程的基本知识。通过本文的学习，您将会学习如何搭建 Flex 基本的开发环境以及开发、调试和部署方面的基础知识。为您以后深入系统的学习 Flex 打下良好的基础。</p>
<p>要学习本文，您需要有一定的 Web 编程经验和 Eclipse FireFox 使用经验。</p>
<p sizset="76" sizcache="22"><a name="N10052"><span class="smalltitle">代码示例和安装要求</span></a></p>
<p sizset="77" sizcache="22">本文所有示例均在 Windows XP SP3 系统中测试完成。您需要一台能流畅运行 Windows XP 系统的机器，除此之外您还需要一些工具才能试用本文中的代码。所有这些工具都可以免费下载（参见 <a href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#resources">参考资源</a>）：</p>
<ul>
    <li>Java SDK 1.5 或更高版本
    <li>Tomcat 6.0 或更高版本
    <li>Eclipse 3.3 或更高版本
    <li>Flex Builder 3.0 或更高版本
    <li>FireFox2.0 或更高版本 </li>
</ul>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizset="78" sizcache="22"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#ibm-pcon">回页首</a></p>
<p sizset="79" sizcache="22"><a name="N10071"><span class="atitle">安装配置开发环境</span></a></p>
<p>接下来我们便迫不及待的开始吧！首先搭建我们的开发环境，为了减少因为环境不一致而引起的问题，建议读者使用与本文相同的软件版本：</p>
<ul sizset="80" sizcache="22">
    <li sizset="80" sizcache="22"><a href="http://java.sun.com/javase/downloads/index.jsp">下载</a> 并安装 JDK( 本文使用版本为 Sun JDK 6) ；
    <li sizset="81" sizcache="22"><a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR1/eclipse-jee-ganymede-SR1-win32.zip">下载</a> 并解压 Eclipse( 本文使用版本为 Eclipse Ganymede J2EE 版本，含 WTP 插件 );
    <li sizset="82" sizcache="22"><a href="https://www.adobe.com/cfusion/tdrc/index.cfm?product=flex_eclipse">下载</a> 并安装 Flex Builder Eclipse 插件版 ( 本文使用的 Flex Builder 版本为 3.0.1);
    <li sizset="83" sizcache="22"><a href="http://dev.xiaonei.com/apache-mirror/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.exe">下载</a> 并安装 Tomcat( 本文使用版本为 Tomcat6.0.18);
    <li sizset="84" sizcache="22"><a href="http://www.mozilla.com/en-US/firefox/all-older.html">下载</a> 并安装 FireFox( 由于 Flex3.0 和一些插件的兼容性问题，本文使用 FireFox2.0.0.17) </li>
</ul>
<div class="ibm-container ibm-alt-header dw-container-sidebar">
<h2>小提示</h2>
<div class="ibm-container-body">
<p>Flex Builder 提供两个版本，一个是 All in one 的版本，另外一个是 Eclipse 的插件版，All in one 的版本内置了一个 Eclipse 的基本核心，插件不全。所以我们采用单独下载 Eclipse 和安装 Flex Builder 插件版的方式。另外在安装过程中不要安装 FlashPlayer 到 IE 或者 FireFox 上。我们在接下来的步骤中将单独安装 debug 版本的 Flash Player 。</p>
</div>
</div>
<p>大家知道 Flex 代码编译后是一个 SWF 文件，运行在 Flash Player 中，要想看到 SWF 文件在运行时输出的一些调试信息是比较困难的。所以在安装好基本的软件之后，我们要安装一些便于我们调试 Flex 的 FireFox 插件：</p>
<p sizset="85" sizcache="22"><a href="http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_plugin_debug.exe">下载</a> 并安装 debug 版本的 FireFox Flash Player 插件 ( 本文使用的版本为 Flash Player10)</p>
<p sizset="86" sizcache="22">打开 FireFox，到 FireFox 的 <a href="https://addons.mozilla.org/zh-CN/firefox/">扩展组件站点</a> 上搜索并安装 HttpFox，FlashTracer，Cache Status 三个插件，如图 1 所示。</p>
<br />
<a name="N100BD"><strong>图 1：开发调试需要的 FireFox 插件</strong></a><br />
<img height="333" alt="图 1：开发调试需要的 FireFox 插件" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image001.jpg" width="572" /> <br />
<div class="ibm-container ibm-alt-header dw-container-sidebar">
<h2>小提示</h2>
<div class="ibm-container-body">
<p>在 Debug 版本的 Flash player 和 FlashTracer 插件完成好之后，我们发现 FlashTracer 并不能正常的显示用 trace 语句输出的调试信息。为了使其能够工作，还需要先点击图 1 中的 FlashTracer 设置按钮来设置日志文件的输出路径。并且输出的日志文件路径对于 Windows XP 来说必须是 C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player\Logs\flashlog.txt 。</p>
</div>
</div>
<p>在安装了 Debug 版本的 Flash Player 之后，Flash Tracer 能显示您在程序中用 trace() 语句输出的调试信息，HttpFox 插件不仅能查看 HTTP 通信的过程和数据，还能看到哪些内容是从 Cache 里面读取的。另外，Cache Status 插件可以让我们方便的管理缓存。在 Flex 开发过程中，往往需要先清除掉缓存中的内容，才能看到新改动的效果。</p>
<p>接下来我们打开 Flex Builder, 在菜单<strong>Window&gt;Preferences&gt;Server&gt;Runtime Environment</strong>中设置我们的 Tomcat6 以及在菜单<strong>Window&gt;Preferences&gt;General&gt;Web Browser</strong>中设置浏览器为外部浏览器 FireFox，如图 2 和图 3 所示：</p>
<br />
<a name="N100E4"><strong>图 2：配置 Tomcat</strong></a><br />
<img height="380" alt="图 2：配置 Tomcat" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image002.jpg" width="572" /> <br />
<br />
<a name="N100F4"><strong>图 3：设置默认浏览器</strong></a><br />
<img height="325" alt="图 3：设置默认浏览器" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image003.jpg" width="483" /> <br />
<p>到此为止，我们的开发环境算是彻底搭建完毕，可以看出这个过程并不算是特别简单。别急，先苦后甜，小憩一下，让我们来享受一下 Flex 开发带来的乐趣吧！</p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizset="90" sizcache="22"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#ibm-pcon">回页首</a></p>
<p sizset="91" sizcache="22"><a name="N10105"><span class="atitle">Flex 的 Hello World ！</span></a></p>
<p sizset="92" sizcache="22"><a name="N1010A"><span class="smalltitle">创建项目</span></a></p>
<p>打开 Flex Builder, 如图 4 所示，新建一个 Flex 项目：</p>
<br />
<a name="N10115"><strong>图 4：新建 Flex 项目</strong></a><br />
<img height="455" alt="图 4：新建 Flex 项目" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image004.jpg" width="407" /> <br />
<p sizset="94" sizcache="22">在图 5 所示设置页面中，我们选择项目类型是 Web application，关于 AIR 类型应用的基础知识可参考 developerWorks 上的另一篇文章<a href="http://www.ibm.com/developerworks/cn/edu/wa-dw-wa-air-mashup.html">《使用 Adobe AIR 和 Dojo 开发基于 Ajax 的 Mashup 应用》</a>。 Application server type 我们以 J2EE 为例，并且不要钩选 Use remote object access service, 关于这些高级内容，我们将在后续的文章中陆续讨论。最后我们使用 Eclipse Ganymede J2EE 版本内置的 WTP(Web Tools Platform) 来创建一个后端使用 Java 前端使用 Flex 的 RIA 项目。在默认设置下，src 是 Java 代码的源代码文件夹。</p>
<br />
<a name="N1012C"><strong>图 5：设置 Flex 项目</strong></a><br />
<img height="375" alt="图 5：设置 Flex 项目" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image005.jpg" width="381" /> <br />
<p>在后续的设置页面中，我们配置项目运行时的 J2EE server 为我们在安装配置开发环境部分中配置的 Tomcat6 如图 6 所示：</p>
<br />
<a name="N1013F"><strong>图 6：配置运行时 J2EE Server</strong></a><br />
<img height="415" alt="图 6：配置运行时 J2EE Server" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image006.jpg" width="567" /> <br />
<p>点击 Next，在下一个页面中一切都按照默认设置即可。如图 7 所示，Main source folder 是设置默认的 flex 代码 ( 包括 mxml 和 Action script) 的源文件夹，Main application file 是项目默认的主应用。 Out folder URL 是项目运行在我们配置的 Tomcat 上时的 URL.</p>
<br />
<a name="N10152"><strong>图 7：其他属性设置</strong></a><br />
<img height="366" alt="图 7：其他属性设置" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image007.jpg" width="572" /> <br />
<p>一切完成之后，我们来看看项目的组成结构，如图 8 所示：flex_src 中是默认的 flex 源码位置，flex_libs 则是存放 flex 其他第三方包的默认路径。类似于 web 应用的 lib 文件夹。 src 是 java 代码位置。 WebContent 文件夹的结构和普通由 WTP 建立的 Web Project 的结构完全相同。在默认的输出路径 bin-debug 文件夹中，我们可以看出 Flex builder 自动生成的 FlexSample.mxml 文件已经被自动编译成 FlexSample.swf 文件。</p>
<br />
<a name="N10165"><strong>图 8：Flex 项目结构</strong></a><br />
<img height="458" alt="图 8：Flex 项目结构" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image008.jpg" width="269" /> <br />
<p>接下来，我们在新创建的项目上增加一点内容并让它运行起来：双击 FlexSample.mxml, 在其中添加一个最基本的 Flex 组件 :Label, 并且在该应用初始化的时候调用 init() 方法。我们在 init() 方法中用 trace() 语句输出调试信息。代码如下清单 1 所示：</p>
<br />
<a name="N10179"><strong>清单 1：FlexSample.mxml</strong></a><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="0" sizcache="2">
    <tbody sizset="0" sizcache="1">
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            &lt;?xml version="1.0" encoding="utf-8"?&gt;
            &lt;mx:Application
            xmlns:mx="http://www.adobe.com/2006/mxml"
            layout="absolute"
            initialize="init()"&gt;
            &lt;mx:Script&gt;
            &lt;![CDATA[
            private function init():void
            {
            var i:int = 0;
            i++;
            trace("i="+i);
            }
            ]]&gt;
            &lt;/mx:Script&gt;
            &lt;mx:Label text="Hello World!" /&gt;
            &lt;/mx:Application&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p sizset="100" sizcache="22"><a name="N10180"><span class="smalltitle">运行、调试以及部署</span></a></p>
<p>现在，终于到了让我们的项目运行的时候了 ! 右键点击项目 -&gt;Run As-&gt;Run On Server 如图 9 所示：接下来的几个页面选择默认即可，这时大家我们可以看到项目会被部署到我们配置的 Tomcat6 上去。并且 Flex Builder 会自动打开一个我们刚才配置的外部 FireFox 窗口。</p>
<br />
<a name="N1018B"><strong>图 9：运行项目</strong></a><br />
<img height="140" alt="图 9：运行项目" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image009.jpg" width="580" /> <br />
<p>但可能令您遗憾的是 Flex Builder 自动打开的 FireFox 窗口打开的 URL: http://localhost:8080/FlexSample/ 却什么也没有。别着急，还剩下最后一步：</p>
<p>如图 10 所示：右键点击我们要运行的 FlexSample.mxml &gt; Run As &gt; Flex Application</p>
<br />
<a name="N101A1"><strong>图 10：运行 mxml</strong></a><br />
<img height="116" alt="图 10：运行 mxml" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image010.jpg" width="572" /> <br />
<p>如果不出意外的话，您应该会看到下面的界面，Flash Tracer 插件输出了我们用 trace() 语句输出的 debug 信息，标签的 Hello World ！也被显示到了界面上。同样，打开 FireFox 的 HttpFox 插件，我们也可以看到在运行时 FlexSample.swf 被载入。</p>
<br />
<a name="N101B4"><strong>图 11：运行后的界面</strong></a><br />
<img height="149" alt="图 11：运行后的界面" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image011.jpg" width="572" /> <br />
<p>如果我们希望像调试 Java 代码那样，在运行时观察变量的值怎么办呢？首先我们像在 Java 代码中设置断点一样给我们的 Action Script 代码增加断点。如图 12 所示：</p>
<br />
<a name="N101C7"><strong>图 12：在 Action Script 代码中设置断点</strong></a><br />
<img height="307" alt="图 12：在 Action Script 代码中设置断点" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image012.jpg" width="367" /> <br />
<p>然后选择我们的 FlexSample.mxml 右键选择调试运行。如图 13 所示：</p>
<br />
<a name="N101DA"><strong>图 13：调试方式运行 flex</strong></a><br />
<img height="82" alt="图 13：调试方式运行 flex" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image013.jpg" width="510" /> <br />
<p>然后我们随提示切换到 Flex 的调试视图，就会看到我们可以像 Java 调试模式那样轻松的调试 Flex 代码。如图 14 所示：</p>
<br />
<a name="N101ED"><strong>图 14：Flex Builder 调试视图</strong></a><br />
<img height="512" alt="图 14：Flex Builder 调试视图" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image014.jpg" width="354" /> <br />
<p>利用 WTP，我们可以将项目 export 成一个标准的 war file. 将导出的 war 文件放到 Tomcat 的 webapps 目录或者其他 web 服务器的相应目录下就可以当作一个标准的 web 应用来部署运行。</p>
<p>到此为止，我们应该庆祝一下我们已经迈入了 Flex 的大门了！我们已经编译出了我们自己的 swf 文件，并且运行在服务器上了。熟悉了这个开发过程之后，让我们乘胜前进，结合一个小例子学习一下 Flex 的编程基础知识吧！</p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizset="107" sizcache="22"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#ibm-pcon">回页首</a></p>
<p sizset="108" sizcache="22"><a name="N10201"><span class="atitle">Flex 编程基础</span></a></p>
<p sizset="109" sizcache="22"><a name="N10206"><span class="smalltitle">面向对象的编程</span></a></p>
<p>在上面 Hello World 的例子中我们可以看出，就像在 HTML 中嵌入 JavaScript 那样，我们可以在 mxml 里面嵌入 Action Script 代码来实现业务逻辑。没错！如果您把 Flex 中 mxml 和 Action Script 的关系理解为 Html 和 JavaScript 的关系，您会忽然发现您对 Flex 变的如此熟悉！</p>
<p>Action Script 语言是面向对象的脚本语言，它连编写方式都和 JavaScript 非常的相似。除了可以嵌套在 mxml 里面之外，它还可以像 JavaScript 写在单独的 .js 文件里面那样写在单独的 .as 文件里面，然后在 mxml 里面引入它。</p>
<p>下面我们新建一个 Action Script 的类 J2eeServer.as 如清单 2 所示：</p>
<br />
<a name="N10218"><strong>清单 2：J2eeServer.as</strong></a><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="1" sizcache="2">
    <tbody sizset="1" sizcache="1">
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            package com.ibm.flex
            {
            import flash.events.EventDispatcher;
            import mx.rpc.AsyncToken;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.http.HTTPService;
            public class J2eeServer extends EventDispatcher
            {
            public function J2eeServer()
            {
            }
            public function sendRequest(locale:String):void
            {
            var httpObject:HTTPService = new HTTPService();
            httpObject.resultFormat = "text";
            httpObject.url =
            "http://localhost:8080/FlexSample/SampleServlet?locale="+locale;
            var responder:mx.rpc.Responder = new mx.rpc.Responder(onSuccess, onFault);
            var call:AsyncToken = httpObject.send();
            call.addResponder(responder);
            }
            private function onSuccess(event:ResultEvent):void
            {
            this.dispatchEvent(event);
            }
            private function onFault(event:FaultEvent):void
            {
            trace("communication failed!");
            this.dispatchEvent(event);
            }
            }
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>在这个类定义里面，熟悉 Java 的开发人员可以看出其编码规范和 Java 非常类似。在其中我们定义了一个 sendRequest() 方法， 使用 HTTPService 对象发起一个 http 的 get 请求 , 并且对于不同的返回结果我们定义了 onSuccess() 和 onFault() 两个方法去处理。在这两个结果处理方法中，我们将事件 dispatch 出去。</p>
<p sizset="111" sizcache="22"><a name="N10222"><span class="smalltitle">与 Servlet 集成</span></a></p>
<p>在 J2eeServer.as 中，我们通过 Action Script 发出 http 请求，现在我们定义一个服务器端的 servlet 来处理该请求。如清单 3 所示：</p>
<br />
<a name="N1022E"><strong>清单 3：SampleServlet.java</strong></a><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="2" sizcache="2">
    <tbody sizset="2" sizcache="1">
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            package com.ibm.sample;
            import java.io.IOException;
            import java.io.PrintWriter;
            import javax.servlet.ServletException;
            import javax.servlet.http.HttpServlet;
            import javax.servlet.http.HttpServletRequest;
            import javax.servlet.http.HttpServletResponse;
            public class SampleServlet extends HttpServlet {
            private static final long serialVersionUID = 1L;
            public SampleServlet() {
            super();
            }
            protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
            }
            protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
            String locale = request.getParameter("locale");
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("The locale you selected is " + locale);
            }
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>和普通 web 应用一样配置 web.xml, 如清单 4</p>
<br />
<a name="N1023B"><strong>清单 4：web.xml</strong></a><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="3" sizcache="2">
    <tbody sizset="3" sizcache="1">
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            &lt;?xml version="1.0" encoding="UTF-8"?&gt;
            &lt;web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
            http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;
            &lt;display-name&gt;FlexSample&lt;/display-name&gt;
            &lt;servlet&gt;
            &lt;display-name&gt;SampleServlet&lt;/display-name&gt;
            &lt;servlet-name&gt;SampleServlet&lt;/servlet-name&gt;
            &lt;servlet-class&gt;com.ibm.sample.SampleServlet&lt;/servlet-class&gt;
            &lt;/servlet&gt;
            &lt;servlet-mapping&gt;
            &lt;servlet-name&gt;SampleServlet&lt;/servlet-name&gt;
            &lt;url-pattern&gt;/SampleServlet&lt;/url-pattern&gt;
            &lt;/servlet-mapping&gt;
            &lt;welcome-file-list&gt;
            &lt;welcome-file&gt;FlexSample.html&lt;/welcome-file&gt;
            &lt;/welcome-file-list&gt;
            &lt;/web-app&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p sizset="114" sizcache="22"><a name="N10242"><span class="smalltitle">事件驱动与数据绑定</span></a></p>
<p>从 J2eeServer.as 中我们依稀可以看出 Flex 事件驱动的影子。的确，Flex 的业务流程大多是靠事件来驱动的。某一个方法结束后，dispatch 出去一个事件。事件的监听者监听到这个事件后就会采取相应的动作来处理事件。如清单 5 所示：我们在 init() 方法中进行了事件绑定，绑定了两个监听方法 successHandler () 和 errorHandler () 到 J2eeServer 上。当 J2eeServer 完成和服务器端 servlet 通信 dispatch 出相应的事件后，两个监听方法便会监听到相应的事件并进行处理。</p>
<p sizset="115" sizcache="22">Flex 的另外一个重要的特点就是支持数据绑定，在另一篇文章<a href="http://www.ibm.com/developerworks/cn/edu/j-dw-java-jfx-mashup.html">《使用 Eclipse 和 JavaFX 开发 Mashup 应用》</a>中我们曾介绍了 JavaFx 的数据绑定特性，同样 Flex 也支持数据绑定。当数据源被绑定到另外一个对象的某属性上时，数据源的数据如果发生变化，开发人员不需要写额外的代码该对象的属性值就可以相应的变化。如清单 5 中所示：如果要进行数据绑定，则要先定义一个可绑定的数据源，例如我们在变量<code> <strong>private</strong> </code><code></code><code><strong>var</strong> </code><code>serverResponse:String =</code> <code><strong>""</strong> </code><code>;</code>的上面设置 [Bindable] 属性，表示其为可绑定变量。然后我们在 resultLable 中使用花括号 {<code>serverResponse</code>} 将变量<code>serverResponse</code>绑定到 resultLable 的 text 属性上。</p>
<br />
<a name="N1027E"><strong>清单 5：FlexSample.mxml</strong></a><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="4" sizcache="2">
    <tbody sizset="4" sizcache="1">
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            &lt;?xml version="1.0" encoding="utf-8"?&gt;
            &lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
            creationComplete="init()"&gt;
            &lt;mx:Script&gt;
            &lt;![CDATA[
            import mx.rpc.events.ResultEvent;
            import mx.rpc.events.FaultEvent;
            import com.ibm.flex.J2eeServer;
            import mx.collections.ArrayCollection;
            private var jserver:J2eeServer = new J2eeServer();
            //可绑定变量
            [Bindable]
            private var serverResponse:String = "";
            //可绑定变量
            [Bindable]
            private var locales:ArrayCollection = new ArrayCollection(
            [ {label:"en_us", data:"en_us"},
            {label:"zh_cn", data:"zh_cn"}]);
            private function init():void
            {
            //事件绑定
            jserver.addEventListener(ResultEvent.RESULT, successHandler);
            jserver.addEventListener(FaultEvent.FAULT, errorHandler);
            }
            private function localeComboxChangeHandler(event:Event):void
            {
            jserver.sendRequest(localeCombox.selectedItem.data);
            }
            private function successHandler(event:ResultEvent):void
            {
            serverResponse = event.result.toString();
            trace(event.result);
            }
            private function errorHandler(event:FaultEvent):void
            {
            serverResponse = event.message.toString();
            trace(event.message);
            }
            ]]&gt;
            &lt;/mx:Script&gt;
            &lt;mx:VBox&gt;
            &lt;mx:Label text="Select your locale:" /&gt;
            &lt;mx:ComboBox
            id="localeCombox"
            width="160"
            dataProvider="{locales}"
            change="localeComboxChangeHandler(event)"/&gt;
            &lt;mx:Label
            id="resultLabel"
            text="The response from server is: {serverResponse}" /&gt;
            &lt;/mx:VBox&gt;
            &lt;/mx:Application&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>最终项目的文件结构如图 15 所示：</p>
<br />
<a name="N1028A"><strong>图 15：项目文件结构图</strong></a><br />
<img height="417" alt="图 15：项目文件结构图" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image015.jpg" width="280" /> <br />
<p>运行项目，我们可以看到当我们改变下拉框的值的时候，会触发 localeComboxChangeHandler() 函数调用 J2eeServer 的 sendRequest() 方法将选择的 locale 值发送给服务器端的 servlet，并且在结果返回后，将从服务器端得到的 response 显示在 resultLable 上。如图 16 所示：</p>
<br />
<a name="N1029D"><strong>图 16：项目运行结果</strong></a><br />
<img height="166" alt="图 16：项目运行结果" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image016.jpg" width="510" /> <br />
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizset="119" sizcache="22"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#ibm-pcon">回页首</a></p>
<p sizset="120" sizcache="22"><a name="N102AB"><span class="atitle">结束语</span></a></p>
<p>Flex 作为 RIA 的新技术，对传统 web 开发技术有继承也有发展。这篇文作为入门文，主要作用是帮助大家掌握 Flex 的开发环境、开发方式、开发调试部署的流程以及 Flex 的基本编程知识。但 Flex 除了国际化、Unit 测试、Ant 编译等传统问题之外，作为新技术 Flex 还有很多不同以往的地方，比如模块开发，RSL(Runtime Shared Libraries), Shared object、和 JavaScript 交互以及它的 MVC 框架 cairngorm，远程调用和消息传递框架 BlazeDS 等。所有这些问题都是值得我们进行后续讨论的。</p>
<p sizset="121" sizcache="22"><a name="N102B3"><span class="smalltitle">致谢</span></a></p>
<p>在本文完成之际，特别感谢 IBM 中国软件开发中心 IM 开发团队我的同事们在工作和学习中给我的巨大帮助！</p>
<!-- CMA ID: 362440 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file:  dw-article-6.0-beta.xsl --><br />
<p sizset="122" sizcache="22"><a name="resources"><span class="atitle">参考资料 </span></a></p>
<p><strong>学习</strong></p>
<ul sizset="123" sizcache="22">
    <li sizset="123" sizcache="22">&#8220;<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=Part2_DevApps_1.html">Flex 3 Developer's Guide</a>&#8221;：很好的 Flex 基础知识入门材料。 <br />
    <br />
    <li sizset="124" sizcache="22">&#8220;<a href="http://www.adobe.com/devnet/flex/?tab:samples=1">Flex Developer Center</a>&#8221;：针对具体开发场景的大量示例代码和文章。 <br />
    <br />
    <li sizset="125" sizcache="22">&#8220;<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=anttasks_1.html">Flex Ant Tasks</a>&#8221;：介绍了如何结合 Ant 工具来编译 Flex。 <br />
    <br />
    <li sizset="126" sizcache="22">&#8220;<a href="http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:Flex_3_RSLs">Flex RSL</a>&#8221;：对Flex RSL开发的各方面进行详细介绍的官方文档。 <br />
    <br />
    <li sizset="127" sizcache="22">&#8220;<a href="http://www.ibm.com/developerworks/cn/web/wa-aj-flex/">集成 Flex 与 Ajax 应用程序</a>&#8221;（developerWorks，2008 年 7 月）：阅读完本文后，您将能够利用通过 Flash 资源获得的丰富功能。<br />
    <br />
    <li sizset="128" sizcache="22">&#8220;<a href="http://www.ibm.com/developerworks/cn/edu/wa-dw-wa-facebookflex.html">使用 Flex SDK 实现一个 Facebook 相册</a>&#8221;（developerWorks，2008 年 12 月）：在本篇教程中，将在 Adobe Flex 中开发一个 Facebook 应用程序，它可以以幻灯片的形式显示用户的 Facebook 相册。<br />
    <br />
    <li sizset="129" sizcache="22">&#8220;<a href="http://code.google.com/p/fluint/">Fluint 的官方站点</a>&#8221;：Fluint 是 Flex Unit Test 的框架 Flex Unit 的升级版本。 <br />
    <br />
    <li sizset="130" sizcache="22">&#8220;<a href="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm">Cairngorm 框架的 Adobe 官方站点</a>&#8221;：Cairngorm 是 Flex 开发最著名和最成熟的一个 MVC 框架。 <br />
    <br />
    <li sizset="131" sizcache="22">&#8220;<a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS">BlazeDS 框架的开源站点</a>&#8221;：BlazeDS 是 Adobe 的一个开源项目。基于服务器的 Java 远程调用（remoting）和 Web 消息传递（messaging）技术，它能够使得后台的 Java 应用程序和运行在浏览器上的 Flex 应用程序或 AIR 应用程序相互通信。 <br />
    <br />
    </li>
</ul>
<p><strong>获得产品和技术</strong></p>
<ul sizset="132" sizcache="22">
    <li sizset="132" sizcache="22"><a href="http://java.sun.com/javase/downloads/index.jsp">下载</a> JRE 或 JDK。 <br />
    <br />
    <li sizset="133" sizcache="22"><a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR1/eclipse-jee-ganymede-SR1-win32.zip">下载</a> Eclipss Ganymede。 <br />
    <br />
    <li sizset="134" sizcache="22"><a href="https://www.adobe.com/cfusion/tdrc/index.cfm?product=flex_eclipse">下载</a> Flex Builder Eclipse 插件版。 <br />
    <br />
    <li sizset="135" sizcache="22"><a href="http://dev.xiaonei.com/apache-mirror/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.exe">下载</a> Tomcat 6。 <br />
    <br />
    <li sizset="136" sizcache="22"><a href="http://www.mozilla.com/en-US/firefox/all-older.html">下载</a> FireFox 2.0。 <br />
    <br />
    <li sizset="137" sizcache="22"><a href="http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_plugin_debug.exe">下载</a> BDebug 版本的 FireFox Flash Player 插件。 <br />
    <br />
    </li>
</ul>
<p sizset="138" sizcache="22"><a name="author"><span class="atitle">关于作者</span></a></p>
<div class="ibm-container ibm-portrait-module ibm-alternate-two" sizset="139" sizcache="22">
<div class="ibm-container-body" sizset="139" sizcache="22">
<p sizset="139" sizcache="22"><a name="author1"></a>刘庆，目前在 IBM 软件开发中心（IBM CSDL）IM 开发团队担任开发工程师，拥有 IBM DB2 DBA 专业认证，他在 J2EE 和 Web 开发领域有着多年开发经验，喜欢关注新技术。他毕业于中国科技大学，并拥有硕士学位。</p>
</div>
</div>
<img src ="http://www.blogjava.net/xiaomage234/aggbug/348972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2011-04-25 13:53 <a href="http://www.blogjava.net/xiaomage234/archive/2011/04/25/348972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flash 9e版[9.0.115]以及以后版本需要注意的事项</title><link>http://www.blogjava.net/xiaomage234/archive/2007/12/21/169483.html</link><dc:creator>小马歌</dc:creator><author>小马歌</author><pubDate>Fri, 21 Dec 2007 15:55:00 GMT</pubDate><guid>http://www.blogjava.net/xiaomage234/archive/2007/12/21/169483.html</guid><wfw:comment>http://www.blogjava.net/xiaomage234/comments/169483.html</wfw:comment><comments>http://www.blogjava.net/xiaomage234/archive/2007/12/21/169483.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaomage234/comments/commentRss/169483.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaomage234/services/trackbacks/169483.html</trackback:ping><description><![CDATA[在12月份，adobe公司发布的最新flash版本 flash 9e的处理上，由于安全原因限定了1024端口以上中的3个端口。<br />
依次为：2049,4045,6000<br />
同样，firefox也限定了对这些端口的访问。<br />
所以在请求这些端口的资源时，如果发现找不到的现象，请改到其他端口再试。<br />
<br />
被屏蔽的端口列表：<br />
Port&nbsp;Service&nbsp; <br />
<br />
　　1&nbsp;tcpmux　&nbsp;　7&nbsp;echo　&nbsp;&nbsp;　9&nbsp;discard　　11&nbsp;systat&nbsp; <br />
<br />
　　13&nbsp;daytime　15&nbsp;netstat　17&nbsp;qotd&nbsp;　　19&nbsp;chargen&nbsp; <br />
<br />
　　20&nbsp;ftp&nbsp;data&nbsp;&nbsp;21&nbsp;ftp&nbsp;control　22&nbsp;ssh　　23&nbsp;telnet&nbsp; <br />
<br />
　　25&nbsp;smtp&nbsp;&nbsp;　　37&nbsp;time&nbsp;&nbsp;　　42&nbsp;name　　43&nbsp;nicname&nbsp; <br />
<br />
　　53&nbsp;domain　77&nbsp;priv-rjs　79&nbsp;finger　　87&nbsp;ttylink&nbsp; <br />
<br />
　　95&nbsp;supdup　101&nbsp;hostriame　102&nbsp;iso-tsap　　103&nbsp;gppitnp&nbsp; <br />
<br />
　　104&nbsp;acr-nema　　109&nbsp;pop2　　110&nbsp;pop3　　111&nbsp;sunrpc&nbsp; <br />
<br />
　　113&nbsp;auth　　115&nbsp;sftp　　117&nbsp;uucp-path　　119&nbsp;nntp&nbsp; <br />
<br />
　　123&nbsp;NTP　　135&nbsp;loc-srv&nbsp;/&nbsp;epmap　　139&nbsp;netbios&nbsp; <br />
<br />
　　143&nbsp;imap2　　179&nbsp;BGP　　389&nbsp;ldap　　512&nbsp;print&nbsp;/&nbsp;exec&nbsp; <br />
<br />
　　513&nbsp;login　　514&nbsp;shell　　515&nbsp;printer　　526&nbsp;tempo&nbsp; <br />
<br />
　　530&nbsp;courier　　531&nbsp;chat　　532&nbsp;netnews　　540&nbsp;uucp&nbsp; <br />
<br />
　　556&nbsp;remotefs　　587　　601&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　2049&nbsp;nfs&nbsp; <br />
<br />
　　4045&nbsp;lockd　　6000&nbsp;X11
<img src ="http://www.blogjava.net/xiaomage234/aggbug/169483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaomage234/" target="_blank">小马歌</a> 2007-12-21 23:55 <a href="http://www.blogjava.net/xiaomage234/archive/2007/12/21/169483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>