<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>hacker47</title>
    <description>与程序为伍,与JAVA共舞.</description>
    <link>http://hacker47.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>FLEX技巧篇---------事件的流转控制</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/226989" style="color:red;">http://hacker47.javaeye.com/blog/226989</a>&nbsp;
          发表时间: 2008年08月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>FLEX是基于事件驱动的,在一个复杂的模型中事件的流转也会经常给人以困扰.这里用一个简单的小例子,说明一下,阻塞事件,以及跨越事件广播的两个小方法.</p>
<p>&nbsp;</p>
<p>这个小例子中,是一个panel里放了一个button,panel和button都有对应的click事件,默认情况下,是点击Button时,button和Panel的事件都会同时响应的.但现在我们有这样两种需求:</p>
<p>&nbsp;</p>
<p>1:点击Button时,要求响应Panel的事件,Button的事件不响应;<br />2:点击Button时,要求响应Button的事件,Panel的事件不响应;</p>
<p>&nbsp;</p>
<p>
<object height="600" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="700">
<param name="src" value="http://www.zzj87.cn/upfile/pics/4cd84e8bc44c0a79b60c9bcf18000707.swf" /><embed src="http://www.zzj87.cn/upfile/pics/4cd84e8bc44c0a79b60c9bcf18000707.swf" type="application/x-shockwave-flash" height="600" width="700"></embed>
</object>
</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>代码这段代码是入门级的,就不多做讲解了:</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
	layout="vertical" creationComplete="initApp();" backgroundColor="black"&gt;
	&lt;mx:Style source="event.css"/&gt;
&lt;mx:Script&gt;
	&lt;![CDATA[
		
		private function initApp():void{
			button.addEventListener(MouseEvent.CLICK,buttonClickHandler,true);
			mypanel.addEventListener(MouseEvent.CLICK,panelClickHandler);
			
			mypanel1.addEventListener(MouseEvent.CLICK,panel1ClickHandler);
			button1.addEventListener(MouseEvent.CLICK,button1ClickHandler);
		}
		
		private function panelClickHandler(event:MouseEvent):void{
			msg1.text="panel click!";
		}
		
		private function buttonClickHandler(event:MouseEvent):void{
			msg2.text="button click!";
		}
		
		private function panel1ClickHandler(event:MouseEvent):void{
			msg3.text="panel click!";
			msg4.text="";
		}
		
		private function button1ClickHandler(event:MouseEvent):void{
			msg3.text="";
			msg4.text="button click!";
			event.stopPropagation();
		}
		
		private function doubleClickHanlder(event:MouseEvent):void{
			msg1.text="";
			msg2.text="";
			msg3.text="";
			msg4.text="";
		}
		
		[Bindable]
		[Embed(source="thumb.jpg")]
		private var butIcon:Class;
		
	]]&gt;
&lt;/mx:Script&gt;
&lt;mx:Label text="任意处双击,清除响应结果...." color="white" /&gt;
&lt;mx:HBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle" doubleClickEnabled="true" doubleClick="doubleClickHanlder(event);"&gt;
	&lt;mx:Panel width="300" height="300" id="mypanel"  horizontalAlign="center" verticalAlign="middle" title="只响应Panel事件:"&gt;
		&lt;mx:Button id="button" icon="{butIcon}" labelPlacement="bottom" label="click me" /&gt;
		&lt;mx:ControlBar&gt;
			&lt;mx:HBox&gt;
				&lt;mx:TextInput id="msg1" width="130"/&gt;
				&lt;mx:TextInput id="msg2" width="130"/&gt;
			&lt;/mx:HBox&gt;
		&lt;/mx:ControlBar&gt;
	&lt;/mx:Panel&gt;
	
		&lt;mx:VRule height="100%"/&gt;
	&lt;mx:Panel width="300" height="300" id="mypanel1"  horizontalAlign="center" verticalAlign="middle" title="只响应Button事件:"&gt;
		&lt;mx:Button id="button1" icon="{butIcon}" labelPlacement="bottom" label="click me" /&gt;
		&lt;mx:ControlBar&gt;
			&lt;mx:TextInput id="msg3" width="130"/&gt;
			&lt;mx:TextInput id="msg4" width="130"/&gt;
		&lt;/mx:ControlBar&gt;
	&lt;/mx:Panel&gt;
	&lt;/mx:HBox&gt;
&lt;/mx:Application&gt;
</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/226989#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 12 Aug 2008 13:40:17 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/226989</link>
        <guid>http://hacker47.javaeye.com/blog/226989</guid>
      </item>
      <item>
        <title>技术人员的悲哀：</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/226652" style="color:red;">http://hacker47.javaeye.com/blog/226652</a>&nbsp;
          发表时间: 2008年08月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><br />瞬间一：春节回家，经商富裕的二叔笑问：&ldquo;隔壁的小王（中专毕业）当经理了，你什么时候当呢？还在搞技术？实在不行回来跟叔做生意&rdquo;<br />　　　　瞬间二：某豪华办公室写字楼，西装革履、英气勃发的市场人员小张刚签了一大单，&ldquo;提成估计够技术部的工程师们干一年多的&rdquo;，美女秘书们这样议论到；远方一个角落，穿着过时T恤的白头发不少的工程师正在找一个客户强烈投诉的程序bug，苦不堪言，老板每5钟问一句：&ldquo;什么时候能搞定？不就是几行代码么，那么难？我当年写程序的时候。。。&rdquo;<br />　　　　瞬间三：一个项目，需要8个工程师，但狡猾的老板只招聘5个，一个研究生（工资6000），2个本科生（工资3000），2个专科生（工资1500），让这位研究生当项目组长，这位研究生同学欣然答应，项目进入高峰，明显人不够，但是这位研究生同学为了对得起老板给他高于另外两个兄弟的工资，基本上是天天疯狂加班，老实的他、毫无怨言，黑心的老板、得意在心，时而找他谈话：&ldquo;我很看好你的！&rdquo;。半年后，研究生病倒了，老板赚大钱了！<br />　　　　瞬间四：美女秘书旁边议论：&ldquo;小张才中专毕业，现在已经是小刘的领导了，小刘还是研究生呢，现在读书真的没用了啦&rdquo;，说完，美女们发出一阵夸张的笑声。。。&ldquo;小陈也不错啊，也混得蛮快&rdquo;，&ldquo;他呀，没什么前途，读这么多书才混成这样，一般般&rdquo;<br />　　　　瞬间五：一位04年毕业的研究生，正在挤公汽上班，忽然后面有人拍了一下肩膀，一看是01年毕业的本科（没读研）老同学，开着小车，说：&ldquo;我送你。。。&rdquo;，其实这位研究生也不差，不过他买的是12000/平米的房子，所以经济紧张，而他的本科老同学3年前买的是5000/平米，少供他80多万贷款，于是买了车还有不少存款。<br />　　　　瞬间六：32岁的博士（某公司技术总监）去相亲，美丽时髦的女孩子可爱地问道：&ldquo;你是做什么生意的？&rdquo;<br />　　　　瞬间七：市场部工作两年的小张提升了，因为两年他签了不少大单，工程师小赵想到：&ldquo;我工作四年了，写程序数万行，什么时候提我啊？写程序真的好累。。。&rdquo;，晚上，老同学打来电话：&ldquo;还没转市场和管理？&rdquo;<br />　　　　瞬间八：从事技术工作的研究生毕业的小王只要一跟老婆吵架，有一句话老婆是必骂的：&ldquo;我看你是读书读傻了，或者是搞技术搞傻了，看楼上的XXX，你就那点死搞技术的出息。。。&rdquo;<br />　　　　瞬间九：某博士下海经商，精神压力异常大，跟客户交流时候只敢说自己是专科毕业，他说：&ldquo;如果我说我是博士，可能会把他们吓跑，另外，要是圈里人都知道我是博士，我只要犯一点错误，会被他们嘲笑很久，但说是专科毕业，犯错误就不会被笑话&rdquo;<br />　　　　瞬间十：父母生病，在家里经商的弟弟一下子拿出了XX万治病，而研究生毕业的哥哥只能拿出一点点，被亲戚们数落不孝，老家的亲戚们不会知道大城市的房价，他们也不需要知道。</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/226652#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 11 Aug 2008 16:36:14 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/226652</link>
        <guid>http://hacker47.javaeye.com/blog/226652</guid>
      </item>
      <item>
        <title>一位软件工程师的6年总结</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/222596" style="color:red;">http://hacker47.javaeye.com/blog/222596</a>&nbsp;
          发表时间: 2008年08月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>转自:<span onclick="copyBlogURL()" style="cursor: pointer;">http://user.qzone.qq.com/418146/blog/1217506522</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span onclick="copyBlogURL()" style="cursor: pointer;"><span style="color: #ffffff;"><span style="font-size: small;"><span>&ldquo;又是一年毕业时&rdquo;，看到一批批学子离开人生的象牙塔，走上各自的工作岗位；想想自己也曾经意气风发、踌躇满志，不觉感叹万千&hellip;&hellip;本文是自己工作6年的经历沉淀或者经验提炼，希望对所有的软件工程师们有所帮助，早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议，前面几点旨在确定大的方向，算是废话吧。</span> <br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员：PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。</span> </span></span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">1、 分享第一条经验：&ldquo;学历代表过去、能力代表现在、学习力代表未来。&rdquo;其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道 理有些体会吧。但我相信这一点也很重要：&ldquo;重要的道理明白太晚将抱憾终生！&rdquo;所以放在每一条，让刚刚毕业的朋友们早点看到哈！</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">2、一定要确定自己的发展方向，并为此目的制定可行的计划。不要说什么，&ldquo;我刚毕业，还不知道将来可能做什么？&rdquo;，&ldquo;跟着感觉走，先做做看&rdquo;。因为，这样的观点会通 过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术，将来成为专家级人物？向管理方向走，成为职业经理人？先熟悉行业和领域，将来自立门户？还是 先在行业里面混混，过几年转行做点别的？这很重要，它将决定你近几年、十年内&ldquo;做什么事情才是在做正确的事情！&rdquo;。</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">3、软件开发团队中，技术不是万能的，但没有技术是万万不能的！在技术型团队中，技术与人品同等重要，当然长相也比较重要哈，尤其在MM比较多的团队中。在软件项目团队中，技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码，还是产品管理、测试、文档、实施、维护，多少你都要有技术基础。算我孤陋寡 闻，我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目，哪怕就一个，也没有看到。倒是曾经看到过一个&ldquo;高学历的牛人&rdquo;(非技术型)带一堆人做完过一个项目，项目交付的第二天，项目组成员扔下一句&ldquo;再也受不了啦！&rdquo;四分五裂、各奔东西。那个项目的&ldquo;成功度&rdquo;大家可想而知了。</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">4、 详细制定自己软件开发专业知识学习计划，并注意及时修正和调整(软件开发技术变化实在太快)。请牢记：&ldquo;如果一个软件开发人员在1、2年内都没有更新过自 己的知识，那么，其实他已经不再属于这个行业了。&rdquo;不要告诉自己没有时间。来自时间管理领域的著名的&ldquo;三八原则&rdquo;告诫我们：另外的那8小时如何使用将决定 你的人生成败！本人自毕业以来，平均每天实际学习时间超过2小时。</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">5、书籍是人类进步的阶梯，对软件开发人员尤其如此。书籍是学习知识的最有效途径，不要过多地指望在工作中能遇到&ldquo;世外高人&rdquo;，并不厌其烦地教你。对于花钱买书，我个人经验是：千万别买国内那帮人出的书！我买的那些家伙出的 书，100%全部后悔了，无一本例外。更气愤的是，这些书在二手市场的地摊上都很难卖掉。&ldquo;拥有书籍并不表示拥有知识；拥有知识并不表示拥有技能；拥有技能并不表示拥有文化；拥有文化并不表示拥有智慧。&rdquo;只有将书本变成的自己智慧，才算是真正拥有了它。</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">6、不要仅局限于对某项技术的表面使用上，哪怕你只是偶尔用一、二次。&ldquo;对任何事物不究就里&rdquo;是任何行业的工程师所不应该具备的素质。开发Windows应用程序，看看Windows程序的设计、加载、执行原理，分析一下PE文件格式，试试用SDK开发从头开发一个Windows应用程序；用VC＋＋、 Delphi、Java、.Net开发应用程序，花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码；除了会用J2EE、 JBoss、Spring、Hibernate等等优秀的开源产品或者框架，抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。 试着这样做做，你以后的工作将会少遇到一些让你不明就里、一头雾水的问题，因为，很多东西你&ldquo;知其然且知其所以然&rdquo;！</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">7、在一种语言上编程，但别为其束缚了思想。&ldquo;代码大全&rdquo;中说：&ldquo;深入一门语言编程，不要浮于表面&rdquo;。深入一门语言开发还远远不足，任何编程语言的存在都有其自身的理由， 所以也没有哪门语言是&ldquo;包治百病&rdquo;的&ldquo;灵丹妙药&rdquo;。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是：用面对对象工具开发某些关键模块时，为什么不可以借鉴C、C51、汇编的模块化封装方式？用传统的桌面开发工具(目前主要有VC++、Delphi)进行系统体统结构设计时，为什么不可以参考来自Java社区的IoC、AOP设计思想，甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源框架？在进行类似于实时通信、数据采集等功能的设计、实现时，为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式？为什么一切都必须以个人、团队在当然 开发语言上的传统或者经验来解决问题？？？&ldquo;他山之石、可以攻玉&rdquo;。</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">8、养成总结与反思的习惯，并有意识地提炼日常工作成果，形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知，对软件开发人员而言，有、无经验的一个显著区别是：无经验者完成任何任务时都从 头开始，而有经验者往往通过重组自己的可复用模块、类库来解决问题（其实这个结论不应该被局限在软件开发领域、可以延伸到很多方面）。这并不是说，所有可复用的东西都必须自己实现，别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是，最好还是自己实现，这样没有知识产权、版权等问题， 关键是自己实现后能真正掌握这个知识点，拥有这个技能。</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">9、理论与实践并重，内外双修。工程师的内涵是：以工程师的眼光观察、分析事物和世界。一个合格的软件工程师，是真正理解了软件产品的本质及软件产品研发的思想精髓的人（个人观点、欢迎探讨）。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作，但从软件工程师这个角度来看，这只是外在的东西，并非重要的、本质的工作。学习、掌握软件产品开发理 论知识、软件开发方法论，并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题，才是真正的软件工程师的工作。站在成熟理论 与可靠方法论的高度思考、分析、解决问题，并在具体实践中验证和修正这些思想与方式，最终形成自己的理论体系和实用方法论。</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">10、心态有多开放，视野就有多开阔。不要抱着自己的技术和成果，等到它们都已经过时变成垃圾了，才拿出来丢人现眼。请及时发布自己的研究成果：开发的产品、有创意的设计或代码，公布出来让大家交流或者使用，你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具，5、6年之后的今天， 还是那个样子，今天流行的好多Windows系统工具都比自己的晚，但进化得很好，且有那么多用户在使用。并且，不要保守自己的技术和思想，尽可能地与人交流与分享，或者传授给开发团队的成员。&ldquo;与人交换苹果之后，每个人还是只有一个苹果；但交换思想之后，每个人都拥有两种思想&rdquo;，道理大家都懂，但有多少人真正能做到呢？</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品，千万不要因为没有钱赚而不做。网络早已不再只是&ldquo;虚拟世界&rdquo;，网上有很多的开源项目、合作开发项目、外包项目，这都是涉猎工作以外的知识的绝好机会，并且能够结识更广的人缘。不要因为工作是做ERP，就不去学习和了解嵌入式、实时、通信、网络等方面的技术，反过来也是一样。如果当他别人拿着合同找你合作，你却这也不会，那也不熟时，你将后悔莫及。</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">12、 书到用时方恨少，不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明： &ldquo;对于一个有一定基础的人来说，他只要真正肯下功夫，在6个月内就可以掌握任何一门学问。&rdquo;教育心理学界为感谢西蒙教授的研究成果，故命名为西蒙学习法。 可见，掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等 知识，有空花时间看看，韬光养晦、未雨绸缪。</span> </span><br /><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">13、本文的总结与反思：</span> </span><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">A：不要去做技术上的高手，除非你的目标如此。虽然本文是关于提高软件开发知识的建议，做技术的高手是我一向都不赞同的。你可以提高自己的专业知识，但能胜任工作即止。</span> </span><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">B：提高软件知识和技术只是问题的表面，本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理，可以很容易地延伸、应用到生活的其它方面。</span> </span><br /><span style="font-size: small; line-height: 1.3em;"><span style="line-height: 1.3em;">C：在能胜任工作的基础上，立即去涉猎其它领域的专业知识，丰富自己的知识体系、提高自己的综合素质，尤其是那些目标不在技术方面的朋友。</span></span></span></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/222596#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Aug 2008 09:44:22 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/222596</link>
        <guid>http://hacker47.javaeye.com/blog/222596</guid>
      </item>
      <item>
        <title>FLEX提高篇---------JAVA对象与AS间的转化关系对照表</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/218622" style="color:red;">http://hacker47.javaeye.com/blog/218622</a>&nbsp;
          发表时间: 2008年07月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在群里不少朋友问我这个问题,我想每一个用FLEX+JAVA来开发的都应该了解下这个吧,从在线文档里找到了这个,贴了上来.供参考.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>我把它们编辑成了图片,大家需要收藏的话直接另存为就OK了.</p>
<p>&nbsp;</p>
<p>先是JAVA2AS</p>
<p>&nbsp;</p>
<p><img src="http://www.javaeye.com/upload/attachment/32078/05cb40e5-3ffb-3c82-aa99-a6c236cd2495.jpg" alt="" />
</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>下面是AS2JAVA的</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="http://www.javaeye.com/upload/attachment/32080/31948726-19a3-37df-ac90-d0a45b6f0928.jpg" alt="" />
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/218622#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jul 2008 16:21:54 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/218622</link>
        <guid>http://hacker47.javaeye.com/blog/218622</guid>
      </item>
      <item>
        <title>FLEX提高篇---------FMS简易聊天室加强版</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/215840" style="color:red;">http://hacker47.javaeye.com/blog/215840</a>&nbsp;
          发表时间: 2008年07月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><!--   [if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:TrackMoves/>
  <w:TrackFormatting/>
  <w:PunctuationKerning/>
  <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
  <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:DoNotPromoteQF/>
  <w:LidThemeOther>EN-US</w:LidThemeOther>
  <w:LidThemeAsian>ZH-CN</w:LidThemeAsian>
  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
  <w:Compatibility>
   <w:SpaceForUL/>
   <w:BalanceSingleByteDoubleByteWidth/>
   <w:DoNotLeaveBackslashAlone/>
   <w:ULTrailSpace/>
   <w:DoNotExpandShiftReturn/>
   <w:AdjustLineHeightInTable/>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:SplitPgBreakAndParaMark/>
   <w:DontVertAlignCellWithSp/>
   <w:DontBreakConstrainedForcedTables/>
   <w:DontVertAlignInTxbx/>
   <w:Word11KerningPairs/>
   <w:CachedColBalance/>
   <w:UseFELayout/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
  <m:mathPr>
   <m:mathFont m:val="Cambria Math"/>
   <m:brkBin m:val="before"/>
   <m:brkBinSub m:val="&#45;-"/>
   <m:smallFrac m:val="off"/>
   <m:dispDef/>
   <m:lMargin m:val="0"/>
   <m:rMargin m:val="0"/>
   <m:defJc m:val="centerGroup"/>
   <m:wrapIndent m:val="1440"/>
   <m:intLim m:val="subSup"/>
   <m:naryLim m:val="undOvr"/>
  </m:mathPr></w:WordDocument>
</xml><![endif]--><!--   [if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267">
  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
  <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
  <w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/>
  <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
  <w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
  <w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
  <w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
  <w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
  <w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
  <w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
  <w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
  <w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
  <w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
  <w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
  <w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
  <w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
  <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
  <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
 </w:LatentStyles>
</xml><![endif]-->
<!--   [if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:普通表格;
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.5pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-font-kerning:1.0pt;}
</style>
<![endif]-->
</p>
<p class="MsoNormal"><span style="font-family: 宋体;">今天写了下简易聊天室的加强版</span>
<span lang="EN-US">,</span>
<span style="font-family: 宋体;">其实功能也十分有很</span>
<span lang="EN-US">,</span>
<span style="font-family: 宋体;">不过比前面提到的简易聊天室要智能了许多</span>
<span lang="EN-US">,</span>
<span style="font-family: 宋体;">这个聊天室的主要功能有以下</span>
<span lang="EN-US">:</span>
</p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>1.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">同一用户不能重复登陆</span>
<span lang="EN-US">,</span>
<span style="font-family: 宋体;">否则服务端拒绝</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>2.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">可以得到聊天室里人员的列表</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>3.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">新用户上线提示</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>4.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">用户离线提示</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>5.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">发送文本消息</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>6.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">新用户上线</span>
<span lang="EN-US">,</span>
<span style="font-family: 宋体;">更新所有聊天室成员列表名单</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>7.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">用户离线</span>
<span lang="EN-US">,</span>
<span style="font-family: 宋体;">更新所有聊天室成员列表名单</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal"><span style="font-family: 宋体;">技术上并没有什么花样儿</span>
<span lang="EN-US">,</span>
<span style="font-family: 宋体;">还是如下几个</span>
<span lang="EN-US">:</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>1.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">客户端与服务端的建立连接</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>2.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">监听连接状态</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>3.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">客户端调用服务端函数</span>
<span lang="EN-US">;</span>
</p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><!--   [if !supportLists]--><span lang="EN-US"><span>4.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--   [endif]--><span style="font-family: 宋体;">服务端调用客户端函数</span>
</p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal">先看看粗糙的效果图:</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><img src="http://www.javaeye.com/upload/attachment/31419/974e6cf2-fec5-3c2d-8c75-aa5d912e5542.jpg" height="515" alt="" width="515" />
</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">再看看代码吧:</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">先看客户端的:</p>
<p class="MsoNormal">&nbsp;</p>
<pre name="code" class="java">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;vertical&quot; xmlns:com=&quot;com.*&quot; backgroundColor=&quot;white&quot;&gt;
	&lt;mx:Style source=&quot;css.css&quot;&gt;&lt;/mx:Style&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			import com.client.clientInvockObj;
			import mx.controls.TextInput;
			import com.carlcalderon.arthropod.Debug;
			import mx.utils.StringUtil;
			public var nc:NetConnection;
			
			private static const RTMP_URL:String=&quot;rtmp://localhost/chatinglist&quot;;
			public var loginName:String;
			private var isConnectSuccess:Boolean;
			
			
			private function initApp():void{
				nc=new NetConnection();
				nc.connect(RTMP_URL,loginName);
				nc.addEventListener(NetStatusEvent.NET_STATUS,checkStatus);
				var obj:clientInvockObj=new clientInvockObj(chatList,chatContent);
				nc.client=obj;
			}
			
			private function checkStatus(e:NetStatusEvent):void{
				trace(e.info.code);
				Debug.log(e.info.code,Debug.BLUE);	
				isConnectSuccess=(e.info.code==&quot;NetConnection.Connect.Success&quot;);
				if(isConnectSuccess){
					nc.call(&quot;getMsg&quot;,new Responder(getMsgResult,getMsgFault));
					loginBtn.enabled=false;
					sendBtn.enabled=true;
					Debug.log(&quot;client connect success!&quot;);
					
				}
			}
			
			private function getMsgResult(chatMsgArray:Array):void{
				Debug.log(&quot;callBack:&quot;);
				for(var i:uint=0;i&lt;chatMsgArray.length;i++){
					chatContent.text+=chatMsgArray[i]+&quot;\n&quot;;
				}
			}
			
			private function getMsgFault():void{
				
			}
			
			public function sendLogin():void{
				if(StringUtil.trim(userName.text).length&gt;0){
					loginName=userName.text;
					initApp();
				}
			}
			
			public function sendMessage():void{
				nc.call(&quot;sendMsg&quot;,null,loginName,msg.text);
				msg.text=&quot;&quot;;
			}
			
			
		]]&gt;
	&lt;/mx:Script&gt;
	&lt;mx:HBox width=&quot;100%&quot;&gt;
		&lt;mx:VBox width=&quot;200&quot; height=&quot;100%&quot;&gt;
			&lt;mx:Label text=&quot;用户列表:&quot;/&gt;
			&lt;mx:List id=&quot;chatList&quot; width=&quot;200&quot; height=&quot;400&quot;  labelField=&quot;userName&quot; cornerRadius=&quot;7&quot;/&gt;
		&lt;/mx:VBox&gt;
		&lt;mx:VBox  width=&quot;100%&quot;&gt;
		&lt;mx:HBox id=&quot;loginPanel&quot;  width=&quot;100%&quot; height=&quot;100%&quot;&gt;
			&lt;mx:TextInput id=&quot;userName&quot;/&gt;
			&lt;mx:Button label=&quot;登陆&quot; id=&quot;loginBtn&quot; click=&quot;sendLogin();&quot;/&gt;
		&lt;/mx:HBox&gt;
			&lt;mx:TextArea id=&quot;chatContent&quot; width=&quot;250&quot; height=&quot;400&quot;/&gt;
			&lt;mx:HBox width=&quot;100%&quot; height=&quot;100%&quot;&gt;
				&lt;mx:TextInput id=&quot;msg&quot;/&gt;
				&lt;mx:Button label=&quot;发送消息&quot; id=&quot;sendBtn&quot; click=&quot;sendMessage();&quot; enabled=&quot;false&quot;/&gt;
			&lt;/mx:HBox&gt;
		&lt;/mx:VBox&gt;
	&lt;mx:VBox&gt;
&lt;/mx:VBox&gt;
	&lt;/mx:HBox&gt;
&lt;/mx:Application&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>还有一个用于绑定到客户端NetConnection的client类,供FMS调用:</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">package com.client
{
	import mx.controls.List;
	import mx.controls.TextArea;
	
	public class clientInvockObj
	{
		private var chatList:List;
		private var chatContent:TextArea;
		public function clientInvockObj(list:List,chatContent:TextArea)
		{
			this.chatList=list;
			this.chatContent=chatContent;
		}
		
		public function getUserList(userList:Array):void{
				chatList.dataProvider=userList;
			}
		
		public function getMsgInfo(msg:String):void{
			chatContent.text+=msg+&quot;\n&quot;;
		}
	}
}</pre>
&nbsp;
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>下面是FMS服务端的:</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">application.onAppStart=function(){
	trace(&quot;App started&quot;);
	this.chatMsgArray=new Array();
	this.userListArray=new Array();
}

application.onConnect=function(client,userName){
	trace(&quot; try  connect &quot;)
	if(checkOnline(userName)){
		this.rejectConnection(client);
		return;
	}
	this.acceptConnection(client);
	trace(&quot;connected&quot;);
	client.userName=userName;
	trace(userName);
	application.userListArray.push(userName);
	sendUserList();
	sendMsgToClient(&quot;欢迎 &quot;+userName+&quot;进入聊天室.&quot;);
	
	client.getMsg=function(){
		trace(&quot;response client&quot;);
		return application.chatMsgArray;
	}
	
	client.sendMsg=function(loginUser,msg){
		trace(&quot;ClientName:&quot;+loginUser);
		var chatInfo=loginUser+&quot;--说:&quot;+msg+&quot;\n&quot;;
		application.chatMsgArray.push(chatInfo);
		sendMsgToClient(chatInfo);
	}
}

application.onDisconnect=function(client){
	trace(&quot;用户:&quot;+client.userName+&quot;----下线.&quot;);
	removeLeftUser(client.userName);
	sendUserList();
	sendMsgToClient(&quot;用户:&quot;+client.userName+&quot;----下线.&quot;);
}

function removeLeftUser(userName){
	for(var i=0;i&lt;application.userListArray.length;i++){
		if(application.userListArray[i]==userName){
			application.userListArray.splice(i,1);
		}
	}
}











function sendMsgToClient(chatInfo){
	var leng=application.clients.length;
	for(var i=0;i&lt;leng;i++){
		application.clients[i].call(&quot;getMsgInfo&quot;,null,chatInfo);
	}
}

function sendUserList(){
	var leng=application.clients.length;
	trace(&quot;client num:&quot;+leng);
	for(var i=0;i&lt;leng;i++){
		trace(&quot;getUserList----&quot;+i);
		application.clients[i].call(&quot;getUserList&quot;,null,application.userListArray);
	}
}

function checkOnline(userName){
	var len=application.userListArray.length;
	for(var i=0;i&lt;len;i++){
		if(application.userListArray[i]==userName){
			return true;
		}
	}
	return false;
}</pre>
&nbsp;
<p class="MsoNormal">对不住大家,代码都没有写注释,因为跟我前面的那篇几乎一样,所以大家不明白可以参看前面的那篇.</p>
<p class="MsoNormal">&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/215840#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 17 Jul 2008 16:10:12 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/215840</link>
        <guid>http://hacker47.javaeye.com/blog/215840</guid>
      </item>
      <item>
        <title>辞职总结 </title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/215740" style="color:red;">http://hacker47.javaeye.com/blog/215740</a>&nbsp;
          发表时间: 2008年07月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p>经过这么多天，思想波动、感情折磨，辞职真的是结束了。总的来说就辞职这一点有以下几点想法：</p>
<p>&nbsp;</p>
<p>1、辞职是件幸苦的事情。有时候为了追求更好的东西，人往往需要克服自己的惰性，先舍弃一些东西才可以。往往有很多人瞻前顾后、患得患失的，虽然是可以理解的、正常的，真的走出那一步，期间的幸苦，尤其是心理上的过渡期，确实是件幸苦的事情。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2、辞职是一个新的开始，需要很强的适应能力和充足的心理准备。其实很多人都会想到新东家的好处，但是真正需要你接受的是新东家的所有一切，就像有人说过的：爱一个人就爱她的一切，不管是缺点还是优点。所以正确的辞职态度是对新东家的困难有充足的准备，心理上能包容自己不认可的一些东西。不管怎么说，新的工作环境、新的制度、新的同事，需要你改变去适应。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>3、辞职不能是盲目的。辞职固然在很多时候给自己的物质条件上增加了不少，但是这不是唯一的标准。每个人有每个人看重的东西，有的人看重的是舒适的工作环境，更多的空闲时间等等，有的人看重的是自己未来的发展。我之所以决定要辞职，是因为在老东家找不到我发展的空间了。不管怎么说，辞职的时候需要考虑的东西很多，但是就我个人的想法来说，我建议大家需要更多的考虑自己的未来的发展。钱这个东西永远是没有够的，在自己有比较好的发展的时候，钱也是水到渠成的事情。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>就个人的发展和职业生涯来说，我觉得有以下几点： </p>
<p>&nbsp;</p>
<p>1、做自己喜欢的事情，并持之以恒。自己喜欢的事情，在很多时候，短期内也许不会给你带来很大的经济效益，但是在耐心的沉寂以后，我相信每个人都能厚积而薄发。那时候钱不是问题。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2、学会思考。每个人都会在自己的职业生涯中遇到或多或少、或大或小的困难或者是低迷期，这时候就需要人学会思考，认真的认识自己，定位自己。找出问题的根本原因很重要。学会站在别人的角度思考，学会思考事物的两面性。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>3、乐观的心态。上帝不可能将所有好的东西都给你，所以你要学会乐观。乐观的看待问题，乐观的面对困难，乐观的接受上帝给你的一切，好的，不好的。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>4、认真。很多时候，简单的事情大家都能完成，注意我这里说的是&ldquo;完成&rdquo;，但是要知道如果能将一个简单的事情做到完美，那么就不是所有的人都能做到的，记住：往往成功的人只是比你更认真，更追求完美。事情做完了以后学会总结，看看能不能有所改进，往前再走一步，也许你就是那个和普通人不同的成功者。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>5、养成好的习惯。养成好的工作习惯和生活习惯，一旦一种好的习惯养成以后，你将受用终身。工作上的就不必多说了，生活上的好的习惯，会让你更容易让人接受，让你更好的与人沟通。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>6、学会尊重你的同事和上司，甚至是打扫卫生的阿姨。一个人的成功与否，有时候不仅仅是工作上的，工作仅仅是你人生的一部分，你需要很多人帮助你成功，所以尊重别人很重要。没有同事的Team Work，你不可能独自一人完成一个大型项目；没有上司的支持，你不可能获得必要的成功资源；甚至是打扫卫生的阿姨，如果没有她给你提供整洁干净的工作环境，你也会受到影响。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>7、多倾听别人的意见。耐心的倾听别人的意见，对的也好，错的也好，他们的成功或者失败也许对你来说是一面镜子，也许就是你智慧的火花。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>8、勇于创新。墨守陈规的人永远只能走在别人的后面，所以要多尝试，即便是失败了，你也会懂得很多、获得更多的经验。工作中的经验不仅仅需要的是成功的经验，有时候也需要失败的经验来加速你的成长，来支持你做出决断。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>9、爱家人。很多时候家人帮你做了原本应该是你完整的事情，他们的支持才能让你后顾无忧的在前台去冲锋陷阵，追求自我的价值。永远不要觉得自己是为家人在工作，所以一些事情家人是天经地义的应该帮你完成的。学会对家人感恩同样重要。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>总之，学会工作、学会做人、学会生活是一件非常高深的学问，没有人能代替你，一切都需要你自己去经历，别人给你的意见和建议只是一种参考，你的决定需要你自己来做。你的命运也是一直把握在自己的手中！ </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>引用:http://blog.csdn.net/java2000_net/archive/2008/07/06/2616891.aspx</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/215740#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 17 Jul 2008 12:40:53 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/215740</link>
        <guid>http://hacker47.javaeye.com/blog/215740</guid>
      </item>
      <item>
        <title>FLEX资源---------手把手实现WebService服务与通讯</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/215521" style="color:red;">http://hacker47.javaeye.com/blog/215521</a>&nbsp;
          发表时间: 2008年07月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>FLEX与后台交互的方式不外乎那三种:HttpService,WebService,remoteObject.虽然从个人的角度我对WebService有些偏见(效率不高),可能因为我是JAVA程序员,所以更喜爱RO这种专属于JAVA数据传输的高效,但WS带上了SOAP的帽子或许很多时候还是能起到关键作用,最近负责了一个FLEX AIR项目就完全基于WS,所以也把WS拿出来说说.在FLEX里实现与后台的交互是相当方便的.语法瞧几眼大家都会,</p>
<p>&nbsp;</p>
<p>我这里把关键的代码贴一下:</p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			private function resultHanlder(e:ResultEvent):void{
				msg.text=e.result.toString();
			}
			private function falutHanlder(e:FaultEvent):void{
				msg.text=e.message.toString();
			}
			
		]]&gt;
	&lt;/mx:Script&gt;
	&lt;mx:WebService wsdl="http://localhost:8080/axis2/services/AccountService?wsdl" id="testService" showBusyCursor="true"
	 useProxy="false"&gt;
		&lt;mx:operation name="withdraw" result="resultHanlder(event);"&gt;
			&lt;mx:request xmlns=""&gt;
				&lt;money&gt;
					{parseInt(param.text)}
				&lt;/money&gt;
			&lt;/mx:request&gt;
		&lt;/mx:operation&gt;
	&lt;/mx:WebService&gt;
	&lt;mx:TextArea id="msg"/&gt;
	&lt;mx:TextInput id="param"/&gt;
	&lt;mx:Button label="sendMsg" click="testService.withdraw.send();"/&gt;
&lt;/mx:Application&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>至于后端如何实现WEBService我有一个不错的文档,照着上面的操作流程图一步步来,相信不会出什么大问题.</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/215521#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jul 2008 18:21:16 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/215521</link>
        <guid>http://hacker47.javaeye.com/blog/215521</guid>
      </item>
      <item>
        <title>FLEX提高篇---------FMS两种方式实现简易聊天室</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/214956" style="color:red;">http://hacker47.javaeye.com/blog/214956</a>&nbsp;
          发表时间: 2008年07月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>原理和代码都很简单,没什么好说的.</p>
<p>&nbsp;</p>
<p>一:利用ShareObject的同步事件来将消息广播到所有客户端:</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white" layout="vertical" initialize="BasicPracticeSO();"&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			private var nc:NetConnection;
			private var shareObject:SharedObject;
			private var monthDay:Date;
			private var isConnectSuccess:Boolean;
			private static const RTMP_URL:String="rtmp://localhost/BasicSO";
			
			
			private function BasicPracticeSO():void{
				nc=new NetConnection;
				nc.connect(RTMP_URL);
				nc.addEventListener(NetStatusEvent.NET_STATUS,operateShareObject);
			}
			
			private function operateShareObject(evt:NetStatusEvent):void{
				isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");
				if(isConnectSuccess){
					shareObject=SharedObject.getRemote("userInfo",nc.uri,false);
					monthDay=new Date();
					shareObject.connect(nc);
					shareObject.addEventListener(SyncEvent.SYNC,detectSO);
				}
			}
			
			private function detectSO(e:SyncEvent):void{
				for(var chng:uint;chng&lt;e.changeList.length;chng++){
				switch(e.changeList[chng].code){
					case "change":
						updateAllClientMsg();
						break;
					case "clear":
						break;
					case "success":
						break;
					default:
						break;
					}
				}
			}
			
			private function updateAllClientMsg():void{
				soList.text+=shareObject.data.msg+"\n";
			}
		
			
			private function addDataToShareObject():void{
				shareObject.setProperty("msg",msgText.text);
				soList.text+=msgText.text+"\n";
				msgText.text="";
			}
		]]&gt;
	&lt;/mx:Script&gt;
	&lt;mx:Label text="ShareObject data:"/&gt;
	&lt;mx:TextArea id="soList" width="300" height="120"&gt;
		
	&lt;/mx:TextArea&gt;
	&lt;mx:Form&gt;
		&lt;mx:FormHeading label="add data to ShareObject:"/&gt;
		&lt;mx:FormItem label="msg:"&gt;
			&lt;mx:TextInput id="msgText"/&gt;
		&lt;/mx:FormItem&gt;
		&lt;mx:FormItem&gt;
			&lt;mx:Button label="send Msg" click="addDataToShareObject();"/&gt;
		&lt;/mx:FormItem&gt;
	&lt;/mx:Form&gt;
&lt;/mx:Application&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>二:在FMS服务端通过编码方试广播消息到所有客户端:</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 1.客户端代码:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white" layout="vertical" initialize="initAppSO();"&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			import com.client.ClientObj;
			private var nc:NetConnection;
			private var shareObject:SharedObject;
			private var monthDay:Date;
			private var isConnectSuccess:Boolean;
			private static const RTMP_URL:String="rtmp://localhost/BasicSO/chat";
			
			
			private function initAppSO():void{
				nc=new NetConnection;
				nc.connect(RTMP_URL);
				var clientObj:ClientObj=new ClientObj(soList);
				nc.client=clientObj;
				nc.addEventListener(NetStatusEvent.NET_STATUS,checkStatus);
			}
			
			private function checkStatus(evt:NetStatusEvent):void{
				isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");
				if(isConnectSuccess){
					soList.text+="connect success"+"\n";
				}
			}
			
			
			private function addDataToShareObject():void{
				var msg:String=msgText.text;
				var responder:Responder=new Responder(callback);
				nc.call("writeFile",responder,msg);
				msgText.text="";
			}
			
			private function callback(str:String):void{
				// ToDo something
			}
			
		]]&gt;
	&lt;/mx:Script&gt;
	&lt;mx:Label text="chating list data:"/&gt;
	&lt;mx:TextArea id="soList" width="300" height="220"&gt;
	&lt;/mx:TextArea&gt;
	&lt;mx:HBox&gt;
		&lt;mx:Label text="msgText:"/&gt;
		&lt;mx:TextInput id="msgText"/&gt;
		&lt;mx:Button label="send Msg" click="addDataToShareObject();"/&gt;
	&lt;/mx:HBox&gt;
&lt;/mx:Application&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2.FMS服务器端代码:</p>
<p>&nbsp;</p>
<p>这里我把聊天记录写到了服务器端的一个文件里.其实写不写都无所谓.</p>
<p>&nbsp;</p>
<pre name="code" class="java">application.onAppStart=function(){
	trace("app is started");
};

application.onConnect=function(client,name){
	client.id=name;
	application.acceptConnection(client);
	var file=new File("chatfile.text");
	
	client.writeFile=function(msg){
		file.open("text","append");
		if(file.isOpen){
			msg=client.id+":"+client.ip+":say:\n"+msg;
			trace(msg);
			file.write(msg);
			file.close();
		}
		//client.call("serverToClient",null,msg);
		for(var i=0;i&lt;application.clients.length;i++){
			application.clients[i].call("serverToClient",null,msg);
		}
	}
};


application.onDisconnect=function(client){
	
	for(var i=0;i&lt;application.clients.length;i++){
		msg=application.clients[i].id+"  left!";
		application.clients[i].call("serverToClient",null,msg);
	}
}</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/214956#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Jul 2008 14:10:25 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/214956</link>
        <guid>http://hacker47.javaeye.com/blog/214956</guid>
      </item>
      <item>
        <title>FLEX提高篇--------客户端呼叫Flash Medis Server3服务端入门</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/214306" style="color:red;">http://hacker47.javaeye.com/blog/214306</a>&nbsp;
          发表时间: 2008年07月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>当你不仅仅只想用FLEX来做纯业务数据的管理时,或者当你的项目有视频,音频,多客户端数据或消息同步,数据即时共享,或者你要做网络游戏,互动社区等等更多要求时,学习FMS将刻不容缓,因为FMS是ADOBE为上面一些特定需求而量身定制的服务器,看名字大家都清楚,这里我贴一个应该是最简单的客户端调用FMS服务端函数的例子,比较类似于AJAX的请求与回调,有此经验,应该是一目了然.</p>
<p>&nbsp;</p>
<p>客户端代码:</p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" horizontalAlign="center"&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			import com.carlcalderon.arthropod.Debug;//导入Debug包
			private var myNc:NetConnection;//定义一个连接对象
			private static const RTMP_URL:String="rtmp://localhost/clientCallServer";//定义RTMP连接地址
			//这里RTMP地址如果是在本地也可以写成rtmp:/clientCallServer,如果是非本地,应该写成rtmp://ip/clientCallServer
			//clientClassServer是你在FMS3安装目录applications目录下新建的一个文件夹名称,也是你的工程的名称,以后所有的东西都放在此目录下
			
			private function sendMsg():void{//定义一个发送消息函数
				myNc=new NetConnection();//实例化一个连接对象
				myNc.connect(RTMP_URL);//连接到远程服务端
				var callbackObject:Responder=new Responder(onResult);//定义回调响应对象
				Debug.log(msg.text);//打印日志
				myNc.call("serverCallFunction",callbackObject,msg.text);
				//调用服务器端serverCallFunction函数,并将返回结果传给callbackObject响应对象,
				//传给服务端serverCallFunction函数的参数为msg.text,这里只传了一个,可以传任意多个
			}
			
			//定义回调函数
			private function onResult(serverBackResult:*):void{
					Debug.log("Server return msg:"+serverBackResult,Debug.BLUE);
					result.text=serverBackResult;//将服务端返回的结果绑定到result TextArea的控件上显示
					msg.text="";//清空输入消息控制msg的值
					try{
						myNc.close();//操作完毕后关闭连接.
					}catch(error:Error){
						Debug.log(error.message.toString(),Debug.GREEN);
					}
				}
			
		]]&gt;
	&lt;/mx:Script&gt;
	
	&lt;mx:Label text="Server response Result:"/&gt;
	&lt;mx:TextArea width="300" height="200" id="result"/&gt;
	&lt;mx:HBox&gt;
		&lt;mx:TextInput id="msg" width="300"/&gt;
	&lt;/mx:HBox&gt;
	&lt;mx:HBox&gt;
		&lt;mx:Button label="send Message to Server" click="sendMsg();"/&gt;
	&lt;/mx:HBox&gt;
&lt;/mx:Application&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>服务器端代码:</p>
<p>&nbsp;</p>
<p>(你要在服务器端你新建的工程目录下clientCallServer里新建一个main.asc文件,然后写在此文件里就行了,就行了,别忘了,代码敲定之后,启动FMS服务器,我前面有文章讲到,这里就不再啰嗦了)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">application.onConnect=function(client){
	trace("come in");
	client.serverCallFunction=function(clientParameter){
		trace(clientParameter+"   come in");
		return "call success!   "+clientParameter;
	}
	
	application.acceptConnection(client);
	
}
/*
	Client.prototype.serverCallFunction=function(clientParameter){
		trace(clientParameter+"come in");;
		return "call success and return back!";
	}
	*/</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/214306#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 13 Jul 2008 09:41:45 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/214306</link>
        <guid>http://hacker47.javaeye.com/blog/214306</guid>
      </item>
      <item>
        <title>FLEX展示--------Web可以如此精彩(漂亮MM+源码共享)</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/214088" style="color:red;">http://hacker47.javaeye.com/blog/214088</a>&nbsp;
          发表时间: 2008年07月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>写javascript我已经快写到麻木的程度了,从表单验证,到JS+DHTML又到AJAX各种框架(DWR,prototype,YUI,jSON......)的热潮一波接一波,甚至还面向对象式的来封装JS.顺便提一下,我手头儿快结项的一个项目竟然是one page,one application,意思就是整个项目只有一个页面,这个主页面里include很多其它子页面,每个页面里都是DIV组成,在第一次将整个项目加载进来,完全用JS和AJAX来处理显示,逻辑,以及特效. 这里不讨论这种架构设计的优劣,我只想表明,我在JS里折腾得够呛,特别是IE6,IE7...FF2,FF3,opera,sarfria....这些浏览器全要兼容.可是项目摆在这里,任务总是要完成的,好在经过几个月的努力现在基本上测试完毕.</p>
<p><br />Flex的诞生其实给了程序员更多的选择,给了设计师更多的灵感和创意空间,这个效果还是很早以前学习FLEX时做的,效果可能并不能让你夺目,可是当你看完它的源码之后,你是否也该惊叹,ActionScript3的神奇力量.(这里的MX标签其实也是AS类)如此之少的代码可以带给用户更多的精彩.不是一种更好的选择吗?</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>不多说了,如果效果你不满意,就看看MM放松下吧.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>(下面的不是截图,请点击图片)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
<object height="406" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="655">
<param name="src" value="http://up.qzone.net.cn/flash/20080712083052_myTest.swf" /><embed src="http://up.qzone.net.cn/flash/20080712083052_myTest.swf" type="application/x-shockwave-flash" height="406" width="655"></embed>
</object>
</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>别忘了学习,看完MM,再看看源码吧(这是很早以前的练习,里面的命名都不是很规范,也没时间整理,大家凑合着看):</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundColor="black"&gt;
	&lt;mx:states&gt;
		&lt;mx:State name="can1State"&gt;
			&lt;mx:SetProperty target="{can3}" name="width" value="100"/&gt;
			&lt;mx:SetProperty target="{can3}" name="height" value="100"/&gt;
			&lt;mx:SetProperty target="{can3}" name="x" value="10"/&gt;
			&lt;mx:SetProperty target="{can3}" name="y" value="120"/&gt;
			&lt;mx:SetProperty target="{can1}" name="width" value="300"/&gt;
			&lt;mx:SetProperty target="{can1}" name="height" value="300"/&gt;
			&lt;mx:SetProperty target="{can1}" name="x" value="120"/&gt;
			
			&lt;mx:SetProperty target="{can2}" name="y" value="10"/&gt;
		&lt;/mx:State&gt;
		&lt;mx:State name="can2State" basedOn="can1State"&gt;
			&lt;mx:SetProperty target="{can1}" name="width" value="100"/&gt;
			&lt;mx:SetProperty target="{can1}" name="height" value="100"/&gt;
			&lt;mx:SetProperty target="{can1}" name="x" value="10"/&gt;
			&lt;mx:SetProperty target="{can1}" name="y" value="120"/&gt;
			
			&lt;mx:SetProperty target="{can2}" name="width" value="300"/&gt;
			&lt;mx:SetProperty target="{can2}" name="height" value="300"/&gt;
			&lt;mx:SetProperty target="{can2}" name="x" value="120"/&gt;
			
			&lt;mx:SetProperty target="{can3}" name="y" value="10"/&gt;
		&lt;/mx:State&gt;
	&lt;/mx:states&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			import mx.effects.easing.Bounce;
			[Bindable]
			private var ss:*=can3;
			
			[Bindable]
			private var up:*=can2;
			
			[Bindable]
			private var down:*=can3;
			
			[Bindable]
			[Embed(source="asset/1.jpg")]
			private var redImg:Class;
			
			[Bindable]
			[Embed(source="asset/2.jpg")]
			private var greenImg:Class;
			
			[Bindable]
			[Embed(source="asset/3.jpg")]
			private var blueImg:Class;
		]]&gt;
	&lt;/mx:Script&gt;
	&lt;mx:Style&gt;
		Canvas{
			borderThickness:"3";
			 borderStyle:"solid";
			 horizontalScrollPolicy:"off";
			 verticalScrollPolicy:"off";
		}
	&lt;/mx:Style&gt;
	&lt;mx:transitions&gt;
		&lt;mx:Transition&gt;
			&lt;mx:Parallel targets="{[can1,can2,can3]}"&gt;
				&lt;mx:Resize duration="200" easingFunction="Bounce.easeOut"/&gt;
				&lt;mx:Move xTo="120" duration="500" yTo="10" target="{ss}"/&gt;
				&lt;mx:Move xTo="10" yTo="10" duration="500" target="{up}"/&gt;
				&lt;mx:Move xTo="10" yTo="120" duration="500" target="{down}"/&gt;
				&lt;mx:Resize widthFrom="100" widthTo="300" heightFrom="100" heightTo="300" duration="1000" target="{ss}"/&gt;
				&lt;mx:Sequence&gt;
					&lt;mx:Blur duration="500" blurYFrom="1.0" blurYTo="20.0"/&gt;
					&lt;mx:Blur duration="500" blurYFrom="20.0" blurYTo="1"/&gt;
				&lt;/mx:Sequence&gt;
			&lt;/mx:Parallel&gt;
		&lt;/mx:Transition&gt;
	&lt;/mx:transitions&gt;
	&lt;mx:Canvas borderColor="red" backgroundColor="black"  id="can1" width="100" height="100" x="10" y="10" click="ss=can1;up=can2;down=can3;currentState='can1State';"&gt;
		&lt;mx:Image source="{redImg}" width="100%" height="100%" scaleX="1" scaleY="1"/&gt;
	&lt;/mx:Canvas&gt;
	&lt;mx:Canvas borderColor="green" backgroundColor="white" id="can2" width="100" height="100" x="10" y="120" click="ss=can2;up=can3;down=can1;currentState='can2State';"&gt;
		&lt;mx:Image source="{greenImg}" width="100%" height="100%"/&gt;
	&lt;/mx:Canvas&gt;
	&lt;mx:Canvas borderColor="blue" backgroundColor="red" id="can3" width="300" height="300" x="120" y="10" click="ss=can3;up=can1;down=can2;currentState='';"&gt;
		&lt;mx:Image source="{blueImg}" width="100%" height="100%"/&gt;
	&lt;/mx:Canvas&gt;
&lt;/mx:Application&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/214088#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Jul 2008 09:05:58 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/214088</link>
        <guid>http://hacker47.javaeye.com/blog/214088</guid>
      </item>
      <item>
        <title>FLEX展示---------炫不炫你说了算(源码共享)</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/213887" style="color:red;">http://hacker47.javaeye.com/blog/213887</a>&nbsp;
          发表时间: 2008年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>前面朋友希望看下源码,其实昨天是打算一起上传的,但JAVAEYE好像在浏览器的兼容性上还有较多问题,上传一直不成功.今天贴出来给大家看下,如果大家要完整的,可以加我QQ:262482485,还是说下代码结构吧,</p>
<p>&nbsp;</p>
<p>主应用是少不了的.先贴出来吧:</p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="black" xmlns:com="com.*"&gt;
		&lt;com:RelectBattonBar/&gt;
&lt;/mx:Application&gt;
</pre>
<p>&nbsp;</p>
<p>当然不只有这么少的代码了,我作成了组件了,来看看RElectBattonBar.mxml(写错了字,大家见谅,Button)</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:VBox 
	xmlns:mx="http://www.adobe.com/2006/mxml" 
	xmlns:reflector="com.rictus.reflector.*"
	xmlns:dragpanel="com.rictus.dragpanel.*"
	xmlns:com="com.*" 
	borderStyle="solid" borderColor="#333333" borderThickness="1" verticalGap="0"
		width="700" height="530" horizontalAlign="center" cornerRadius="10"
	    verticalAlign="middle" backgroundColor="#070707"&gt;
	    &lt;mx:Spacer height="140"/&gt;
	    &lt;dragpanel:DragPanel id="buttonsBar" width="100%" height="130" borderStyle="none" verticalGap="0" backgroundColor="black"&gt;
	    	&lt;mx:HBox width="100%" height="100%" verticalAlign="middle" horizontalAlign="center"&gt;
	    	&lt;com:MyButton label="登陆"/&gt;
			&lt;com:MyButton label="注册"/&gt;
			&lt;com:MyButton label="查询"/&gt;
			&lt;com:MyButton label="转账"/&gt;
			&lt;com:MyButton label="改密"/&gt;
			&lt;com:MyButton label="投诉"/&gt;
			&lt;com:MyButton label="帮助"/&gt;
		    &lt;/mx:HBox&gt;
	    &lt;/dragpanel:DragPanel&gt;
		&lt;reflector:Reflector id="myReflector" target="{buttonsBar}"  alpha=".6" falloff="0.33" blurAmount="0.27"/&gt;
&lt;/mx:VBox&gt;</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>还没有完,还有一个我自定义的MyButton.mxml</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Button xmlns:mx="http://www.adobe.com/2006/mxml" icon="{btnIcon}" 
	  labelPlacement="bottom" color="black" styleName="MyButton"
	  rollOverEffect="{bigZm}" rollOutEffect="{smallZm}"
	  scaleX=".9" scaleY=".9" width="90" height="90" fontSize="13" cornerRadius="10"&gt;
	&lt;mx:Style&gt;
		.MyButton {
   					fillAlphas: 0.18, 0.77, 0.27, 0.76 ;
   					fillColors: #cccccc, #990000, #cccccc, #000000;
  					color: #ffffff;
   					textRollOverColor: #ffffff;
    				/* themeColor: #990000; */
    				themeColor: #009dff;
					}
	&lt;/mx:Style&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			[Bindable]
			[Embed(source="login.png")]
			public var btnIcon:Class;
			
		]]&gt;
	&lt;/mx:Script&gt;
	&lt;mx:Parallel id="bigZm"&gt;
		&lt;mx:Zoom zoomHeightFrom=".9" zoomHeightTo="1" zoomWidthFrom=".9" zoomWidthTo="1" duration="300"/&gt;
		&lt;mx:Glow alphaFrom="1.0" color="#ffffff"  alphaTo=".3" blurXFrom="0" blurXTo="30" blurYFrom="0" blurYTo="30" duration="300"/&gt;
	&lt;/mx:Parallel&gt;
	&lt;mx:Parallel id="smallZm"&gt;
		&lt;mx:Zoom id="bigZoom" zoomHeightFrom="1" zoomHeightTo=".9" zoomWidthFrom="1" zoomWidthTo=".9" duration="300"/&gt;
		&lt;mx:Glow alphaFrom=".3"  color="#000000"  alphaTo="1" blurXFrom="30" blurXTo="0" blurYFrom="30" blurYTo="0" duration="2000"/&gt;
	&lt;/mx:Parallel&gt;
&lt;/mx:Button&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>另外,提醒一下, 我用到了一个倒影效果的包,大家可以到网上下载Reflector ,源代码就这么多,其实也不算多吧.</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/213887#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Jul 2008 13:14:36 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/213887</link>
        <guid>http://hacker47.javaeye.com/blog/213887</guid>
      </item>
      <item>
        <title>RIA+REST如何来化解Java的劣势</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/213675" style="color:red;">http://hacker47.javaeye.com/blog/213675</a>&nbsp;
          发表时间: 2008年07月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="tpc_content" id="read_tpc">我在前面两篇blog中都说到：&ldquo;REST是简化Java Web开发的良药&rdquo;。<br />Java的劣势在何处？与前些年相比，现在看的已经很清楚了，Java的劣势就在于做Web表现层的开发。Web表现层开发需求变化频繁，Java这类静态类型的语言不够敏捷，严重影响了开发的效率。<br /><br />而JavaEE的一个最大的缺点，就是企图在服务器端搞定一切，我将这种开发方式称作&ldquo;传统集中式的开发方式&rdquo;。标准的J2EE三层架构&mdash;&mdash;Web表现层、业务层、持久层，也许对于传统的基于HTML表单的Web应用来说是恰当的，但是现在已经显得落伍了。JavaEE企图在服务器端完全搞定Web表现层的开发，给自己制造了一个大麻烦。无论是从这门语言本身，还是从支持这门语言主要的公司Sun、IBM、BEA、Oracle来说，他们并不擅长此道。擅长此道的是哪些公司呢？Adobe/Macromedia、M$、Borland/CodeGear。<br /><br />如果Web表现层必须要在服务器端开发，Ruby on Rails的优势与JavaEE相比要明显的多。RoR要比任何主流的JavaEEWeb表现层框架和技术（Struts、WebWork、SpringMVC、JSF、Tapestry、etc.）更加灵活，学习成本更低，开发效率更高。<br /><br />换个思路来思考，如果我们不再假设客户端就是几乎毫无智能的ThinClient将会如何？假设我们能够充分利用客户端的Ajax组件库和各种RIA技术，将Web表现层完全或者绝大部分前推到客户端来开发，并且通过REST风格的API来与服务器通信，那么服务器的角色就变成了类似于Web服务提供者（注意：这里和Web服务还是有很大的差别，因为REST在这里是用于同一个应用内部的通信，即连接一个应用的客户端和服务器端）的角色，这样就能够极大地简化服务器端Java的开发工作，让它从自己所不擅长的领域退出来，集中精力做自己最擅长的一些工作。<br /><br />这个趋势其实在3年多前我在JavaEye论坛中宣传基于XMLHttpRequest的开发方式的时候就已经看到了，现在这个趋势已经越来越明显了，新一代Web开发方式的面貌已经逐渐浮出水面。Adobe AIR/Flex、M$WPF/Silverlight都是这样一类的开发方式，当然Ajax也可以以这种方式来做开发。我给这样一类开发方式取名叫做&ldquo;RIA+REST&rdquo;。<br /><br />在服务器端搞定一切当然也有好处，因为这样可以获得最佳的控制，安全问题解决起来也比较容易。但是其代价就是无法得到最佳的交互设计，强迫用户不得不承受降级的使用体验。如果这样的用户体验是能够接受的，那么采用这种方式做设计和开发问题不大。但是如果这样的用户体验是无法接受的，那么就需要严肃地考虑RIA+REST的开发方式了。与传统集中式的开发方式相比，这是一类新型的分布式的开发方式，在一些方面（交互设计、服务器端架构）得到了简化的同时，也会使得一些方面（服务器端的控制能力、安全性）复杂化，所以要求架构师作出慎重的权衡。分布式应用必然会带来很大的复杂性，但是REST无疑是基于Web的分布式应用的最理想的架构风格，在Web领域REST的优势要比RPC和分布式对象等架构风格大的多。同时REST是简练实用的，可以很大程度上降低分布式应用的巨大复杂性。<br /><br />根据我的经验，在绝大多数中小型项目中，Web表现层开发的工作量要比后面两层的开发工作量的总和还要大，也就是占到项目开发工作量的一半以上。当用户需要较为苛刻的使用体验时，传统集中式的开发方式完全无法满足要求，而必须由Ajax来补充。然而，对于有复杂交互需求的应用来说，RoR应用的开发效率同样也会受到基于DHTML的开发效率的拖累，而无法充分体现出其敏捷的优势。<br /><br />如果Java将做Web表现层开发的负担卸掉，让客户端的RIA技术来承担，那么Java在服务器端开发中与Ruby相比的劣势就不是那么明显了，甚至在很多方面还有优势。从整体架构的开发效率来考虑，<br />RIA + REST + Java<br />RIA + REST + Ruby<br />两种架构组合也许可以达到大致相同的级别，即使Java在开发效率上仍有劣势，但是也不会像在传统集中式的开发方式中那样悬殊。有很多传言说基于RoR开发的项目与基于Java开发的项目相比，开发效率能够高出5-10倍。我虽然对于Java并不乐观，但是对于RIA+REST这种新的开发方式，我估计开发效率的差距应该可以降低到2倍左右。不过开发效率只是一个方面，如果服务器端的代码经过良好重构，重用性非常好，不会在半年之后就成为必须要抛弃的遗留代码，那么Ruby在开发效率方面的巨大优势也许只会停留在最初的阶段。随着代码的积累，这种开发效率的优势会逐渐降低下来。<br /><br />Ruby会不会拥抱RIA呢？RoR2.0将会是完全基于REST设计的开发框架，他们现在拥抱REST，就是为将来拥抱RIA做准备。对于传统集中式的开发方式来说，应用REST当然也会带来很大的好处，但是我认为这并不是RoR的主要的目的。RoR拥抱REST，是希望使自己在将来的技术变迁过程中处于一个非常有利的位置。对于未来Web开发技术的发展，REST处在一个核心的位置，它是连接客户端和服务器端的纽带，REST也会极大影响客户端架构和服务器端架构的设计和建模。&ldquo;面向资源的Web应用&rdquo;，将会是未来几年的一个技术热点。<br /><br />Java在对于REST的支持这个方面行动要迟缓的多。官方正在制订的JSR311规范主要还是面向不同的应用之间的集成，也就是主要覆盖SOAP所覆盖的领域，而不是面向RIA+REST这样一类新型的Web应用开发方式。不过，一些支持REST的Java框架已经存在，也可以基于Adobe的Flex框架（今年之内就会开源）来做设计，这些框架使得基于Java做REST设计和开发成为了一件比较容易的事情。我们不指望Sun已经有很多年了，日子不是一样过来了吗？Sun其实可以坦承：&ldquo;我不做老大已经很多年了&rdquo;。<br /><br />综上所述，我认为支持REST对于JavaEE而言，意义甚至要比RoR更大。是否能够拥抱未来Web开发技术的发展趋势，对于Java语言未来的命运来说是至关重要的。&nbsp; <br /></div>
<div class="tpc_content">原文地址:http://bbs.flashas.net/read.php?tid=1199</div>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/213675#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Jul 2008 20:06:08 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/213675</link>
        <guid>http://hacker47.javaeye.com/blog/213675</guid>
      </item>
      <item>
        <title>FLEX展示---------炫不炫你说了算!</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/213573" style="color:red;">http://hacker47.javaeye.com/blog/213573</a>&nbsp;
          发表时间: 2008年07月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天做了下这个,放上来给大家瞧下,做JAVA做得好好的,突然迷上搞这玩意儿了,希望自己花的时间是值得的.</p>
<p>&nbsp;</p>
<p>但我真不知道,在其它公司,做这DD是美工的活儿,还是程序员的活儿呢? 请大家给个准话儿! </p>
<p>&nbsp;</p>
<p>
<object height="640" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="700">
<param name="src" value="http://up.qzone.net.cn/flash/20080710055757_main3.swf" /><embed src="http://up.qzone.net.cn/flash/20080710055757_main3.swf" type="application/x-shockwave-flash" height="640" width="700"></embed>
</object>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/213573#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Jul 2008 17:52:14 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/213573</link>
        <guid>http://hacker47.javaeye.com/blog/213573</guid>
      </item>
      <item>
        <title>FLEX探讨篇--------大话客户端,FLEX和EXT你选谁?</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/212875" style="color:red;">http://hacker47.javaeye.com/blog/212875</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>取这个标题,难免会惹来幼稚和可笑之闲,打心底压根儿没有拿这两者来比过,因为这两者是否具有可比性本身是个疑问.可是最近一些朋友的公司却一直在UI的技术选型上犯愁.一些朋友这么问我,所以我想把自己的想法罗列在此,仅供参考.</p>
<p>先申明,我不是什么牛人,也不是FLEX和EXT方面的高手,甚至对EXT并没有在项目中亲自实践过,写此文之前我问自己,凭什么在此发言? 最后我找到一个说服自己的欠充分的理由.既然有人发问,就应该个答案,既然我不能更清楚地说出答案,何不以此做为源头,让更多的人来揭开这层面纱,此文难免落入俗套,请大家海涵.</p>
<p><br />不啰嗦了,进入主题吧.</p>
<p>FLEX和EXT该选谁?</p>
<p>&nbsp;</p>
<p>一:从项目的风险上来考虑:</p>
<p><br />&nbsp; 项目能否成功,一定程度上并不关技术鸟事儿.因为不同的技术可能达到同样的效果.而我们往往只选取最有把握的一种技术,这其实就是让项目归避了风险,那么这两者中哪一种技术你更有把握呢? 大家自己更清楚,不过我可以大概地分析下两者目前使用现状来做个推测或猜测.不排除有例外.</p>
<p>FLEX在国内已明显比国外慢了半拍,从FLEX的相关学习资料可以得出这一结论,记得从FLEX2开始我重新开始了对FLEX(以前玩过FLASH)的关注,那时我还在神龙汽车公司里做实施项目用的是SSH架构.项目中有很多有关经销商的数据需要统计和比较,客户非常希望能够直接在系统中看到各经销商特定数据项比较的结果,当时苦于没能说服经理采用FLEX的CHART来实现这一功能,而采用了BO报表这个庞大的系统来"高射炮打蚊子",当时提出FLEX技术项目组的同志们闻所未闻,我简单地说是FLASH的一种技术,大家听罢都敬而远之.说FLASH依赖于FP.后来学习FLEX变成了我的业余爱好.当然现在在国内大概不会再出现类似的情况了,FLEX以及微软的SL大有山雨欲来风满楼的架势.CSDN的孟岩说"RIA是趋势",我想倒底是不是趋势大家能感受得到.在这里我想表明一点,其实是EXT已经被众多企业以及用户所接受,但FLEX还在考验和推广的路途之中.回到风险的考虑上来讲,你的团队中真正懂FLEX的人不多,或者根本就没有.因为大家都没有FLEX方面的经验积累,如果你贸然采用FLEX,一旦在你的项目中遇到FLEX本身或者你的团队不能解决的难题,而又很难在寻求外界的技术支援时,你的项目势必为摇摇欲坠.这种惊心动魄我想大家都不想感受.而EXT听起来虽然是个新名词,但正如XX人所说,AJAX只是一个新瓶装老酒的DD,我们几乎不需要额外的学习就可以完美的实现"拿来主义",而且我们还可以根据自己的需求来修改内部的代码.所以就目前来讲,EXT的技术风险远低于FLEX.</p>
<p>&nbsp;</p>
<p>二:学习和培训的成本:</p>
<p><br />要上一个项目,如果你的团队没有FLEX的经验也没有EXT的经验积累.别无它法,一:让团队成员自学然后交流,二:给团队成员培训一下.而不管是学习还是培训,EXT会更快地让大家所接受,所以EXT的学习培训成本或者说成是使用成本更低.(当然这只是就当前的项目而言,从公司长远的考虑,学习FLEX这个投入可能会得到更高的回报, 这是后话).</p>
<p>&nbsp;</p>
<p>三:企业运营的成本:</p>
<p><br />BS结构的DD,server是运营时的重头戏,带宽的大小,服务器的负载能力....因素,在项目开发之前技术选型时都要经过深入考究,本着"问题都要在项目开始之先暴露的原则",我们不能视FLEX项目的更高的带宽要求而不见;FLEX在第一次将整个项目SWF下载到客户端缓存,所以如果项目大载入会非常慢,鉴于国内的带宽状况似乎还很不乐观,这一点是几乎是FLEX技术选择时最为头疼的问题,这里或许有人会反驳说,有办法解决:我想很严肃地回驳,没办法解决,运用RSL以及module只能缓解这种尴尬;</p>
<p>针对这一尴尬.adobe官方有这么一说,FLEX是为企业级用户准备的,当然如果你做的是企业级方案,那这一尴尬确实可以不再让其蒙羞;所以FLEX在外网的解决方案的使用上似乎要更加慎重考虑</p>
<p>再回到话题上来,FLEX与EXT相比所需的带宽要求要高得多,如果最终用户的网络带宽不理想,你用FLEX做再华丽的,再炫,再牛的用户体验,他也体会不到.当系统的并发数急剧增加时,企业的服务器要相应地提高对用户的响应速度,也需要加大带宽,运用木桶原理,可能需要增加的带宽不小(本人没有数据来说明,因为没有做过测试),支付的费用也会成若干倍增加.</p>
<p>&nbsp;</p>
<p>四:开发效率和维护成本</p>
<p><br />看到上面,好像我更倾向于采用EXT,似乎我把FLEX说得一无是处,其实不然,FLEX也是时代的英雄,只是他的演出才刚拉开帷幕,从开发效率上来讲EXT根本没法跟FLEX相提并论,有以下几点大家可以比较一下,<br />1.FLEX可以完全基于可视化拖曳,丰富组件,以及傻瓜式的自定扩展,可以让你对UI高枕无忧.<br />2.FLEX有基于EC的插件以及FB独立IDE,有EC的使用经验这方面是得心应手的,调试编辑,跟JAVA几乎雷同,比EXT的JS要省心得多.<br />3.用户体验,这是FLEX的强项了,我就不说了;<br />4.跨平台,这也是FLEX的强项,我也不说了;<br />5.搜索引擎,这一点以前有人一直把这当成FLEX的把柄,说FLEX不能更好的被搜索,刚刚放出来的新闻,大家可能都看到了,FLEX现在也开始支持GOOGLE,和雅虎的搜索了,至于其它搜索引擎,那是迟早的事儿了吧.而EXT好像还没有这方面的动静儿.<br />6.维护成本,其实从1,2两点似乎就已经得出了结论;</p>
<p>&nbsp;</p>
<p>五:从企业引入新技术的的收益来看:</p>
<p><br />公司引入新技术,往往并不单纯是为了眼下的单个项目,公司更渴望通过这个项目能够有技术的积累和经验的积累,而FLEX集众多亮点于一身,必然是富客户端时代的宠儿.(这里我不想来讨论FLEX与MS的SL的优劣,因为这两者不管谁是谁非,谁都无法取代谁,就像JAVA和.net一样.)如果企业能很及时的引入和积累FLEX技术,或许可以在与客户的竞标过程中更加引人入目,还可能让自己的产品更加丰富多彩.而EXT,我从别人那里听来的是EXT只是AJAX技术过渡产物中的一种,或许他不会消失,或许他还会继续在AJAX的天空里夺光炫目,或许还有其它可能.而FLEX却像一个婴儿,还有很长的路要走,我独胆断定FLEX的生命周期要比EXT更长更久.</p>
<p><br />六:FLEX和EXT你到底选谁?</p>
<p>&nbsp;</p>
<p>我再重复一下我个人的观点:我认为EXT只是一个作品,它能让你创作的地方可能不会很多,而FLEX却是一个真正的工具,你可以发挥你的想象为客户去做任何事情.<br />那么如果在上面的五点你经过均衡之后你能轻松地得出答案,那么你的答案应该没错儿,但如果还是无从选择,那我推荐使用FLEX.别忘了,把你使用FLEX的心得跟大家一同分享.</p>
<p><br />将此文发出来,我一直很担心,怕太多个人幼稚的观点,招来唾骂,但我写此文的目的,在文前已经说明,只是想做为一个引子,让大家借题发挥各自的看法,如果你有EXT和FLEX的经验和想法,大家不妨一起分享,表示感谢!</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/212875#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 22:31:00 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/212875</link>
        <guid>http://hacker47.javaeye.com/blog/212875</guid>
      </item>
      <item>
        <title>FLEX提高篇---------FLEX换肤,看不懂的是&quot;傻瓜&quot;</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/212366" style="color:red;">http://hacker47.javaeye.com/blog/212366</a>&nbsp;
          发表时间: 2008年07月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>为什么选择FLEX,很大部分原因在于FLEX的视觉效果和冲击力.其实说起FLEX的换肤功能,实在是没有值得提及的地方,因为一切就像傻瓜式的一样,来得那么快,那么简洁.我们经常对自己说,语言只是工具,而编程思想才是最重要的.而换肤的原理,和HTML的CSS也是如出一辙,都是定义多套CSS,根据需要导入不同的一套.FLEX也是这么干的.唯一不同的是,他专门提供了一个加载样式表的类,而不用刷新.</p>
<p>这里唯一要提醒大家的是定义了多套CSS样式文件之后,一定要编译CSS文件成SWF文件,然后加载对应的SWF文件才行.编译的方法是在CSS文件上右键,选编译成SWF就OK了.</p>
<p>这个例子的确是很简单的,如果你有点儿编程基础,看不懂这个,那......所以我就不做多解释了.</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			import mx.events.ListEvent;
			import com.carlcalderon.arthropod.Debug;
			
			private static const DEFAULT_SKIN:String="default";
			private static const RED_SKIN:String="red";
			private static const BLUE_SKIN:String="blue";
			
			private function changeSkinHanlder(e:ListEvent):void{
				//Debug info
				Debug.log(e.target.selectedItem.data as String,Debug.RED);
				
				if(e.target.selectedItem){
					switch(e.target.selectedItem.data as String){
						case DEFAULT_SKIN:
							StyleManager.unloadStyleDeclarations("css/blue.swf");
							StyleManager.unloadStyleDeclarations("css/red.swf");
							break;
						case RED_SKIN:
							StyleManager.unloadStyleDeclarations("css/blue.swf");
							StyleManager.loadStyleDeclarations("css/red.swf");						
							break;
						case BLUE_SKIN:
							StyleManager.unloadStyleDeclarations("css/red.swf");
							StyleManager.loadStyleDeclarations("css/blue.swf");
							break;
						default:
							break;
					}
				}
			}
			
		]]&gt;
	&lt;/mx:Script&gt;
	&lt;mx:ComboBox id="changeSkinCombox" labelField="label" change="changeSkinHanlder(event);"&gt;
		&lt;mx:ArrayCollection&gt;
			&lt;mx:source&gt;
				&lt;mx:Array&gt;
					&lt;mx:Object data="{DEFAULT_SKIN}" label="default Skin"/&gt;
					&lt;mx:Object data="{RED_SKIN}" label="red Skin"/&gt;
					&lt;mx:Object data="{BLUE_SKIN}" label="blue Skin"/&gt;
				&lt;/mx:Array&gt;
			&lt;/mx:source&gt;
		&lt;/mx:ArrayCollection&gt;
	&lt;/mx:ComboBox&gt;
&lt;/mx:Application&gt;
</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hacker47.javaeye.com/blog/212366#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Jul 2008 15:54:40 +0800</pubDate>
        <link>http://hacker47.javaeye.com/blog/212366</link>
        <guid>http://hacker47.javaeye.com/blog/212366</guid>
      </item>
      <item>
        <title>FLEX提高篇--------ShareObject对象详解</title>
        <author>hacker47</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hacker47.javaeye.com">hacker47</a>&nbsp;
          链接：<a href="http://hacker47.javaeye.com/blog/208389" style="color:red;">http://hacker47.javaeye.com/blog/208389</a>&nbsp;
          发表时间: 2008年06月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" style="margin: 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">ShareObject,</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">顾名思义共享对象</span><span lang="EN-US"><span style="font-family: Times New Roman;">,</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">而通常意义上的共享，从</span><span lang="EN-US"><span style="font-family: Times New Roman;">B/S</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">结构上来讲</span><span lang="EN-US"><span style="font-family: Times New Roman;">,</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">无非是客户端（浏览器端）的共享和服务器端的共享了</span><span lang="EN-US"><span style="font-family: Times New Roman;">,</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">不错</span><span lang="EN-US"><span style="font-family: Times New Roman;">,ShareObject</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">刚好份演了这两种角色。而且</span><span lang="EN-US"><span style="font-family: Times New Roman;">ShareObject</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">也是按此进行了两种分类</span><span lang="EN-US"><span style="font-family: Times New Roman;">,</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">一类是</span><span lang="EN-US"><span style="font-family: Times New Roman;">LSO</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">&mdash;&mdash;</span><span lang="EN-US"><span style="font-family: Times New Roman;">Local Share Object</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">（本地共享对象）其实类似于</span><span lang="EN-US"><span style="font-family: Times New Roman;">cookie</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">，而另一种</span><span lang="EN-US"><span style="font-family: Times New Roman;">RSO</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">&mdash;&mdash;</span><span lang="EN-US"><span style="font-family: Times New Roman;">Remote Share Object(</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">远程共享对象</span><span lang="EN-US"><span style="font-family: Times New Roman;">) </span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">我感觉比较类似于</span><span lang="EN-US"><span style="font-family: Times New Roman;">JSP</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">中的</span><span lang="EN-US"><span style="font-family: Times New Roman;">Application</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">对象，但好象比</span><span lang="EN-US"><span style="font-family: Times New Roman;">Application</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">更强大。</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Times New Roman;">&nbsp;</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"><span style="font-size: small;">下面我分别用实例代码来说两者的用法和用途：</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Times New Roman;">&nbsp;</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">一：</span><span lang="EN-US"><span style="font-family: Times New Roman;">LSO</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">（本地共享对象）</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">LSO</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的用法比较简单，和我们平常操作</span><span lang="EN-US"><span style="font-family: Times New Roman;">Cookie</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">大同小异：</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">1</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">．得到一个共享对象：</span></span></p>
<p class="MsoNormal" style="margin: 0pt 0pt 0pt 21pt; text-indent: 21pt;"><span lang="EN-US"><span style="font-size: small; font-family: Times New Roman;">var so:SharedObject=SharedObject.getLocal("mydata","/");</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">2</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">．往共享对象里存入值：</span></span></p>
<p class="MsoNormal" style="margin: 0pt 0pt 0pt 21pt; text-indent: 21pt;"><span lang="EN-US"><span style="font-size: small; font-family: Times New Roman;">var user:Object=new Object();</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Times New Roman;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>user.userName=userName.text;</span></span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Times New Roman;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>user.passWord=passWord.text;</span></span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Times New Roman;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>user.isSaveLogin=(remember.selected==true?1:0);</span></span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Times New Roman;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>so.data.user=user;</span></span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">3</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">．清除共享对象里的值：</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Times New Roman;"><span style="mso-tab-count: 1;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>var so:SharedObject=SharedObject.getLocal("mydata","/");</span></span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Times New Roman;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(so.data.user!=null){</span></span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Times New Roman;"><span style="mso-tab-count: 5;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>so.data.user=null;</span></span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Times New Roman;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">4</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">．读取共享对象里的值：</span></span></p>
<p class="MsoNormal" style="margin: 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Times New Roman;"><span style="mso-tab-count: 1;">&nbsp;&nbsp;&nbsp;&nbsp;&nbs