java的flex开发

除非您在过去的四年左右的时间里一直从相当大的巨石下面编写代码,否则对于所有出色的孩子来说,“富Internet应用程序”或“ RIA”的概念早在某个时候就横渡了开发人员的视野。 如果您是上述提到的地下开发人员之一,那么我将由您的Google技能来探索RIA的正式定义; 现在,假定这意味着拥有一个比传统Web应用程序更具有功能和/或性能意识的用户界面,其“键入地址,等待网络发送Web页面,填写在表单上,​​单击一个按钮,等待网络传递另一个Web页面的“交互周期”。 AJAX是一种这样的RIA,Silverlight是另一种,但是所有这些早在Adobe的Flash之前就已经存在。

由于它们的新颖性,RIA的大部分重点都集中在AJAX和普通JavaScript之类的工具上,但是在过去三年中,苹果在移动设备市场上的主导地位突然而戏剧性地崛起,这给所有这一切带来了挑战。 仅仅拥有一个采用最新浏览器技术的Web应用程序并与美国政府竞争的宽带连接是不够的。 实际上,即使有了该浏览器和快速的连接,想要超越HTML基础知识的Web应用程序开发人员也突然发现自己陷入了以下冲突:浏览器实现冲突,网络延迟,JavaScript库数量众多以及用户管理不当。

创世纪...个人

作为一个在整个职业生涯中都花费大量时间来担心后端的开发人员,我从来没有对开发应用程序前端的开发人员所使用的工具和技术给予过多的热爱。 实际上,我倾向于忽略全部内容,称应用程序开发的大多数方面“只不过是看着像素改变颜色”。 我承认,这并不是最讨人喜欢的短语,但是说实话:直到最近几年,传统的应用程序UI开发还不是世界上最令人兴奋的对话:提出表格,让用户输入一些内容,然后将其提交回服务器,后端人员将在这里进行繁重的工作。 当然,所述提升包括验证所有输入的所有工作(如果用户实际上是黑客,试图通过伪装成浏览器并使用Telnet欺骗我们,但仍然跳过所有“出色的” JavaScript验证逻辑, ),甚至可以并行进行一些数据库和/或Web服务调用,收集一些模板或视图生成技术,以准备需要发送回的各种HTML,CSS和JavaScript片段,然后将它们组装并运输。返回浏览器进行渲染和显示。

美好的时光。

不过,最近,我面前发生了几件事,要求我重新审视UI世界的状态:

  • 移动设备市场-iPhone,Android甚至Windows Phone-都已经升温到忽略它的大部分,这表明您即将从软件开发中退休。 我可能要退休了,这看起来在财务上不可行一阵子,没有两个孩子准备去上大学。
  • 说到孩子们,我的长子对成为游戏开发者非常感兴趣,并且对我们两个或两个共同致力于游戏创意感兴趣。 当然,传统上,游戏并不是我们大牌“企业”开发类型的主题...但是,除了只想和我的儿子在一起,“游戏化”正在Swift成为精通网络的热门术语和营销人员,因此值得进一步探索。
  • 说到游戏,游戏存在一系列有趣的问题:与传统的基于表单的应用程序相比,它们具有非常不同的通信和演示要求。 但是,游戏并不仅仅局限于此-可以从更快的响应时间甚至某种离线执行策略中受益的不止几个商业应用程序。 就像我们想假设每个用户都将拥有始终在线的宽带连接一样,一个鲜明的现实是,具有Internet连接的飞机仍然很少见,酒店ISP却无缘无故消失,而良好的会议无线仍然是一种全能型服务,太难以捉摸的宝藏。 实际上,可以公平地说,我们看到的网络连接扩展到各个地方的次数越多,似乎很难找到好的连接。 这严重损害了传统浏览器客户端的功能。
  • 最后但并非最不重要的一点是,Adobe与我取得联系,询问我是否有兴趣从Java专家的角度研究Flex,以认真研究它并写下结果。 原则上,全面披露要求我声明他们要付钱给我写这些文章,但是出于个人诚实的考虑,我一直在寻找借口与Flex一起度过一段美好时光,因此他们的报价可以这么说我。

那么,该计划就是要做到这一点:在InfoQ上举办的专栏中,从Java第一人的角度(而不是像时髦的穿高领毛衣的耳环式网页设计Flash-故事板专家),不仅从传统的纯灰色业务应用程序角度进行了研究,而且还从各种不同角度进行了研究,包括游戏/游戏化,与现有Java应用程序的集成以及其作为移动设备客户端的适用性技术。

我们可以?

入门

Flash平台(Flex的基础)几乎与浏览器本身一样普遍,十年来已经在全世界的浏览器中安装了Flash平台。 最初,它是通过浏览器内部的可爱动画小短裤,视频剪辑和奇特游戏来弥补粗心的方法。 多年来,除了Java applet(它有各自的问题)之外,这仍然是除HTML规范之外的任何事情的唯一方法。 当然,它需要一个本机插件,但这被认为是做生意的成本,并且大多数用户忍受一次性下载才能看到跳舞的仓鼠或玩可爱的休闲游戏。

不幸的是,由于Flash从一开始就被设计为易于使用“创意”类型进行访问,因此它本身使用了艺术集中的概念,例如情节提要,时间轴,动画效果等,因此它本身仍然不受大多数​​开发人员的欢迎。 在任何地方都找不到表单字段,对象模型或核心验证逻辑组件。 这意味着,如果开发人员要使用该平台,则他们必须使用外来工具,不熟悉的术语以及使用浓咖啡而不是捣碎Mountain Dew的用户社区。

尽管具有外部外观,Flash平台始终与基于Java的表亲非常相似:基于字节码的执行引擎,可移植到各种不同的平台。 (在许多方面,Flash插件表示Java在客户端存在的一次写入运行的“假设条件”的答案。)Flash而不是.class或.jar文件,而是执行.SWF(“ swiff”)文件以公共文档格式排列,就像.class文件一样。 几年前,Adobe采取了向开发人员开放平台的步骤,提供了Flex(一套工具),旨在使开发人员无需使用面向美术的Flash工具即可轻松构建SWF。

因此,第一步将是获取所述SDK,该SDK可在Adobe网站的<< URL >>中找到。 随意观察会发现,Flex有两种不同的下载方式,它们之间的主要区别在于每个软件都附带了许可模型-较大的下载“ Adob​​e Flex SDK”包含受Adobe自己的开放源代码许可的软件,而该软件可能不某些组织可以接受,因此Adobe提供了一个替代软件包,即Mozilla许可(MPL)的“开源Flex SDK”。 通常,除非您的组织对此类事情特别严格,否则完整的“ Adob​​e Flex SDK”捆绑包非常适合开发人员研究和原型开发,但律师在考虑投入生产之前应先查看许可。 最近发布的Flex 4.5 SDK将成为我们的工作平台。 如果还没有,请花点时间将其拉下。

检索后,SDK只是一个ZIP文件,可以轻松解压缩到硬盘驱动器上的方便位置,最好是您生活中其他开发工具附近的某个位置。 在我的系统上,我倾向于将所有工具放在“ prg”目录下,因此在Windows上,它位于“ C:\ Prg \ flex-4.5”; 参见图1-1。 在该目录中,我们找到了许多工具和文件,使用的目录结构对于以前看过JDK安装目录的开发人员来说相当熟悉。 “ bin”目录将是开发人员喜欢的工具的存储位置(因此应位于PATH上),“ samples”将是各种示例应用程序所在的位置,依此类推。

图1-1

(一个警告提示:图1-1中的目录清单中显示的“ env.bat”文件是我自己创建的,用于轻松快速地设置命令行环境以进行Flex开发;它是一个简单的批处理文件来设置PATH并为终端窗口命名,因此在Windows下看起来如图1-2。它还假定您的JDK和相关工具已经在同一终端窗口中设置了。)

图1-2

@SET ANT_HOME=C:\prg\apache-ant
@SET JAVA_HOME=C:\prg\jdk_1.6.0
@SET FLEX_HOME=C:\prg\flex_sdk_4.5.0.20967
@PATH=%FLEX_HOME%\bin;%ANT_HOME%\bin;%JAVA_HOME%\bin;%PATH%
@TITLE Flex 4.5 Prompt

判断Flex是否适合使用的最快,最简单的方法是旋转一种基于“ bin”的工具,而我们很快就会知道的是Flex编译器mxmlc。 因此,假设PATH中已经存在C:\ Prg \ flex-4.5 \ bin,则将其启动(“ mxmlc”),看看它是否响应; 假设一切都很好,您应该看到传统的编译器“我什么都没做”的响应,如图1-3所示。

图1-3

给我看代码(和工具)!

任何开发人员必须在新平台上编写的第一个程序始终是“ Hello World”,这不仅是因为它要对我们的远古祖先(Kernighan和Ritchie)给予应有的尊重,而且还因为它展示了我们可以使用的最简单的程序工具。 对于某些平台,例如原始的C编译器,需要三行文本和一个命令行调用才能获得有用和可执行的内容-随着平台变得越来越复杂,构建某些东西所需的步骤数可能会变得更加复杂。 (Java开发人员可能仍然不知道要执行“ Hello,EJB!”需要多少步骤。)Flex仍然位于规模接近极限的位置,但是它不仅需要单个文本文件,还需要很多步骤。炫耀。

脚手架

Flex与Flash的关系与Java与JVM的关系非常相似。Flex是一种工具(如果需要完全准确,则为完整的SDK),旨在生成字节码并将资源组装到单个包中,即.SWF文件,适合在Flash平台上执行。 因此,Flash需要某种执行引擎或虚拟机来执行SWF文件。 通常,当遇到SWF文件时,该引擎/ VM已经存在于用户的计算机上,但并不总是如此; 因此,用户必须注意确保已经预先安装Flash平台,否则开发人员将必须注意在用户首次看到该平台时启用“及时”安装。

实际上,上一段可以归结为:对于Web应用程序,SWF文件需要围绕它的某种小型HTML支架,以将Flash VM“引导”到位,就像Java小应用程序需要类似的支架来实现那样。 JVM已启动并正在运行。 那时,使用applet意味着告诉浏览器“ applet进入此处”,然后指向正确的JAR文件并触发正确的类。 如清单2-1所示,用于FlashHTML支架非常相似,告诉浏览器“ Flash出现在这里”,然后指向要加载的SWF,并提供有关其周围环境的一些详细信息。

清单2-1

<html>
<body>
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0"
width="1024"
height="768">
<param name="movie" value="MyFirstFlex4App.swf" />
<embed src="MyFirstFlex4App.swf"
width="1024"
height="768"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" />
</object>

目前,大多数HTML支架基本上都是可忽略的-关键元素埋在文件的中心,在<OBJECT>标记下的<EMBED>子标记内。 毫不奇怪,“ src”属性描述了在加载此页面并将其显示在浏览器内部时要执行的SWF文件的名称。 <PARAM>标记描述了找到该文件的URL; 因为我们现在正在处理本地文件系统,所以这将直接复制<OBJECT>中“ src”属性。 “ width”和“ height”属性非常不言自明。 所有这些在Adobe网站上都有详尽的描述,对于那些想了解所有标记的目的和可能的参数的人, 请参见此链接和此链接 。 (出于简短的好奇,<OBJECT>用于IE 3.0,而<EMBED>用于Netscape Navigator 2.0。是的,Flash可以追溯到那时 。)

那些好奇的人可以根据需要在浏览器中启动页面,以查看我们得到了什么。 这并不是特别令人兴奋,但是它将用作快速测试,以查看闪存位是否已在计算机上。 不用说,但是如果不是,那么现在是将它们拉下来的好时机。

64位? 疯狂,我说! 疯狂!

关于Flash播放器和64位浏览器的简要说明:它们不能一起使用。 具体来说,缺少对Flash的64位浏览器支持,因此在64位浏览器中启动Flash的尝试将以失败告终。 Adobe的React是“只使用浏览器,其他人没有的32位版本”和“64位支持来了”,因为看到这里 。

标记和代码

就像HTML一样,Flex是一个两管齐下的工具。 在一个分支上,开发人员使用一种标记语言(Flex中的XML)对用户界面组件进行布局,该标记语言描述了应用程序中不涉及的各种按钮,控件和功能。 创建静态文本“ hello,world”将是标记中的简单练习。 不幸的是,这并没有展示出Flex的另一半,它是为响应控件可能触发的各种事件而编写的代码,开发人员将在其中进行应用程序的实际“工作”。 因此,我们仅需触摸即可复杂化并在页面上创建一个按钮,为此,我们将编写一个事件处理程序以弹出一个消息框,提示“ Hello world”。

Flex的编译器mxmlc希望标记驻留在扩展名为“ mxml”的文本文件中,因此启动可信任的文本编辑器并创建“ MyFirstFlex4App.mxml”。 (理想情况下,请使用能够理解XML语法的编辑器,以帮助避免出现明显的XML错误,例如忘记关闭标签等。)在其中放入清单2-2中所示的文本。 与大多数“ Hello”示例一样,此处的目标不是要了解所有细微差别,而是要对整个语言和环境有一个总体感觉,并理智地检查工具和运行时是否正常工作。

清单2-2

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
minWidth="1024" minHeight="768">
<s:Button x="17" y="14" label="Button" id="btnSayHello" />
</s:Application>

从本质上来说,MXML文件是格式良好的XML文件,这意味着XML名称空间与任何XML名称空间都具有相同的目的,即保持不同标记名的词法范围。 可以将它们视为与Java包相同的角色。 实际上,看一下代码,此示例中仅使用了其中两个名称空间前缀:fx :(我们将在约4个段落中使用)和s :,但是这组名称空间前缀通常会出现在许多Flex程序以及声明额外的名称空间对结果程序的影响为零(就像导入未使用的Java程序包一样),因此至少到现在,习惯使用它们可能是一个好习惯。

因此,标记的其余部分相当普通:“ s:Application”标记描述这是一个应用程序,并且包含单个子控件“ s:Button”。 每个属性的设计都经过精心设计,以使创建HTML表单的任何人都可以立即熟悉它们。 我们没有描述单击此按钮时将执行的操作,但是本着“提早发布,请经常发布”的精神,让我们来看看这里所发生的事情。

但这在我的系统上不起作用!

如果什么也没有出现,或者由于某种原因您的浏览器开始从Adobe下拉位,请不要惊慌; HTML脚手架正试图通过从Adobe网站上拉下最新的Flash Player来最大程度地减少用户方面的工作。 这表明Flash播放器尚未放在您的包装盒中,几分钟后,通常会显示“您确定吗?” 对话框中,Flash应该已准备就绪。

如果看上去比这更严重,请将您的浏览器指向<< Adob​​e URL >>,以验证Flash是否确实正确安装在您的盒子上。 如果失败,则您可能需要与计算机的系统管理员进行长时间交谈,以找出导致故障的原因,但不幸的是,这超出了本文的范围。

建造

生成Flex应用程序包括使用mxmlc工具将.mxml文件编译为.SWF文件。 执行该工具(“ mxmlc MyFirstFlex4App.mxml”),假设mxmlc位于PATH上,并且.mxml文件位于同一目录中,那么自从时间开始以来,所有命令行编译器都执行了以下操作:它提供了有关其含义的一些描述并假设输入代码正确,完成后将.SWF文件生成到同一目录中。 这意味着,如果我们随后在浏览器中打开脚手架HTML文件,则在Flash插件完成加载后,图2-3之类的内容应向您回望。 仍然不是特别令人兴奋,因为当用户(您,我或您的莎莉姨妈,如果她正好看着您的肩膀)单击按钮时,什么也没有发生。

图2-3

萨利姨妈对您来说太快了-她单击了按钮,什么都没有发生,她很失望。 解决该特定问题的方法是为按钮的“ onClick”事件定义一个事件处理程序,就像开发人员为HTML表单编写的内容一样。 而且,在似乎与Web开发故意相似的地方,用于编写该事件处理程序的语言是一种故意类似于JavaScript的语言,称为ActionScript,在其亲朋好友中也称为AS。

对于简单的演示,通常最简单的做法是将AS直接包含在标记文件中,因此请放回.mxml文件,并将清单2-4中找到的文本放到中间。 这里出现两个变化:在其中定义了事件处理程序功能的子“ <fx:Script>”标记,以及在Button声明中添加了“ click”属性,以命名该函数以在用户单击时执行。 对于那些不熟悉“ CDATA”部分的人,这实际上是一种XML方式,告诉XML解析器停止将“ <”和其他标记标记视为标记标记; 当在标记文件中编写代码时,尤其是在使用比较运算符和布尔运算符(“ <”和“&”)进行操作时,这变得至关重要,因为否则需要对它们进行XML转义。 (对不起,伙计们,但是“ if(1 <5)”和“ if(x && y)”确实读起来并不好。)

清单2-4:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
minWidth="1024" minHeight="768">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
protected function btnSayHello_clickHandler(event:MouseEvent):void
{
Alert.show("Hello World");
}
]]>
</fx:Script></s:Application>

长期JavaScript作者将立即注意到普通JavaScript和ActionScript之间的一些区别; Adobe选择脱离传统JavaScript,以试图消除对该语言的一些流行批评。 例如,ActionScript比JavaScript具有更强的类型,因此AS中的声明将需要“类型描述符”来帮助编译器确保正确使用所有内容。 ActionScript还需要引用其他软件包(库)才能使用它们; 因此,“脚本”块顶部的“导入”语句。

但是,像JavaScript一样,函数的名称纯粹是约定俗成的-如果“ control_handler”不符合您的特定编码约定,并且您更喜欢“ foo”之类的名称,那就去做吧。 (请稍后不要抱怨。)

重新编译代码以产生一个新的.SWF,它现在响应按钮单击,在浏览器中重新加载“ hello.html”页面,然后瞧瞧,单击按钮将产生图2-5。 远古的祖先,接受我们的敬意。

图2-5

冲洗,然后重复

花费了五分钟多的时间编写Java代码的Java开发人员已经知道Ant生成工具的好处-任何重复的问题都容易为人为失误,并且随之而来的是生产力和动力的损失。 (如果您从未花费任何时间尝试调试某些东西,只是发现您认为自己编译的代码实际上并未被编译,请随时转到本系列的下一篇文章。)鉴于Flex是就像Java一样,在一个经过编译的环境中,Flex具有与Ant相似的地位和方向的工具是很有意义的,但是Adobe表现得更好:Flex包含了一系列的Ant任务,而不是重新发明轮子Java / Flex开发人员可以轻松地将Flex插入其构建脚本中。

(是的,这意味着您需要安装Ant。如果您尚未安装Ant,请执行以下操作:要么作为IDE的一部分,要么通过此链接直接进行命令行安装–然后请交出Java开发人员卡,然后返回到您的COBOL,我们会假装没有人看到任何东西。如果您使用Maven,那您就靠自己了-Adobe不支持“开箱即用”,尽管有一些教程将Flex SDK位安装到其中。一个Maven仓库。但是,老实说,如果您使用Maven,请寻求帮助。)

规划

我们有两个源文件,“真实的” Flex布局和代码MyFirstFlex4App.mxml,以及用于显示已编译的Flash应用程序的hello.html脚手架HTML文件。 通常,Java约定建议所有源文件都应位于项目根目录之外的“ src”目录中,因此,如果尚未这样做,请创建该子目录并将两个文件都放在该目录中。 就像一种测试一样,要确保一切仍然正常,请启动一个mxmlc构建,以从“ src”目录构建.SWF文件,并使用“ mxmlc src / MyFirstFlex4App.mxml”将输出文件生成回该目录。 ”。 当然,传统惯例也要求构建工件与源目录显示在不同的目录中(以使其更容易清理生成的构建工件(如果没有其他情况)),并且mxmlc通过“输出”命令支持该构建工件-行参数:“ mxmlc src / MyFirstFlex4App.mxml –输出dist / MyFirstFlex4App.swf”。

假定一切正常,我们便有了一个Ant构建文件的基本布局,该文件可以为我们完成所有这些工作。 Flex构建任务将使其变得更容易,但是现在让我们继续进行增量开发。 首先- 使用直接的<exec>任务传递Ant文件,如清单3-1所示。

清单3-1:

<project name="MyFirstFlex4App" basedir="." default="compile">   <target name="init">      <mkdir dir="build" />      <mkdir dir="dist" />   </target>

   <target name="compile" depends="init">     <exec executable="mxmlc">       <arg value="src/MyFirstFlex4App.mxml" />       <arg value="-output" />       <arg value="dist/MyFirstFlex4App.swf" />     </exec>   </target>

   <target name="clean">     <delete dir="build" />     <delete dir="dist" />   </target></project>

弹性任务

当然,使用<exec>标记的最大缺点是我们必须将每个参数布置在单独的<arg>标记中,随着时间的推移,这将变得有些乏味。 另外,我们缺乏Ant任务可以进行的任何类型的验证,因此很明显,切换到使用Adobe提供的Ant任务有一些附加值。 这样做就像添加Ant <taskdef>来包含Flex任务一样简单,然后切换到使用Flex提供的任务元素进行编译。

但是,首先要注意:如Flex SDK的“ ant”目录中的README中所述,Flex Ant任务要求Flex工具位于PATH上才能正确执行。 既然我们一直是从命令行进行构建的,那么现在这应该不是问题,但是如果您关闭了一直在使用的“终端”窗口并在以后遇到问题,请检查以确保确实如此。

切换使用<mxmlc>任务就像从<exec>切换到<mxmlc>一样简单,并提供与task标签的属性相同的命令行参数,如清单3-2所示。 请注意,FlexTask版本将缩短,因为现在将编译器参数捕获为属性,而不是显式的<arg>标记。

清单3-2:

<target name="compile" depends="init">
<mxmlc file="src/MyFirstFlex4App.mxml" output="build/MyFirstFlex4App.swf" />
</target>

蚂蚁脚手架

但是,在使<mxmlc>工作之前,我们需要采取另一步骤,即告诉Ant在哪里可以找到Flex任务。 这是Ant <taskdef>标记的工作,需要引用其中定义了Ant任务本身的“ flexTasks.jar”文件,以及对映射标记名称的“ flexTasks.tasks”文件的引用( JAR文件中定义的任务(“ flex.ant.MxmlcTask”)的Java类的“ mxmlc”。 然后,假设Flex已安装在我的系统上的C:\ Prg \ flex4.5上,则<taskdef>将读取类似“ <taskdef resource =“ flexTasks.tasks” classpath =“ C:/Prg/flex4.5 /ant/lib/flexTasks.jar“ />”。 当然,Flex不太可能安装在您的计算机上的同一位置(特别是如果您使用的是Mac或Linux机顶盒),这意味着如果我们都在同一个项目上工作,那么有人会感到沮丧特别快:您的“ /usr/local/flex-4.5”将与我的“ C:\ Prg \ flex-4.5”不匹配,并且如果Ant脚本将Flex SDK安装直接嵌入到脚本中,我们将需要“两个人进入/一个人退出”的讨论来解决。

这是Ant使用属性文件提供帮助的地方:定义一个不在源代码控制下的本地文本文件,称为“ local.properties”,并在其中定义单个name = value对,“ FLEX_HOME = <安装位置>” 。 然后,taskdef变成“ <taskdef resource =” flexTasks.tasks“ classpath =” $ {FLEX_HOME} /ant/lib/flexTasks.jar“ />”,我们俩都会很高兴。

然后,下一步就是简单地转到使用<mxmlc>,如清单3-3所示。

清单3-3:

<project name="MyFirstFlex4App" basedir="." default="compile">  <property file="local.properties" />  <taskdef resource="flexTasks.tasks"           classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />

  <target name="init">    <mkdir dir="build" />    <mkdir dir="dist" />  </target>

  <target name="compile" depends="init">    <mxmlc file="src/MyFirstFlex4App.mxml" output="build/MyFirstFlex4App.swf"           compiler.debug="true" />  </target>

  <target name="clean">    <delete dir="build" />    <delete dir="dist" />  </target></project>

是的,这很无聊,但现在对基础架构的一点关注将在以后得到回报。 设置完成后,这个基本的Ant脚本就可以成为您将来所有Flex项目的初始项目模板,就像该基本的Ant Java / web-app脚本在servlet新时一样。

顺便说一句,好奇的读者可能会想知道编译器命令行参数的完整列表是什么? 发现这一点就像键入“ mxmlc –help list”以获取参数的完整列表一样容易,并且通过这样做,我们也可以获得<mxmlc>属性的完整列表。 Adobe在FlexSDK / ant目录的自述文件中指出,编译器参数在Ant任务中表示为属性。 因此,如果要打开命令行参数“ -compiler.debug”,可以通过在<mxmlc>任务中添加“ compiler.debug ='true'”来实现。

因此,事情很好。 或多或少。

包装纸

当然,问题在于“ hello.html”脚手架文件仍位于“ src”内部,要拥有完整的“构建”,我们确实需要将其放置在.SWF文件(或其他文件)旁边。如果您愿意的话)。 虽然我们可以继续进行操作,并且只是将文件从“ src”复制到“ dist”(如果将.SWF内置到另一个常见的Ant约定“ build”中,则对.SWF进行相同的操作),实际上有一个更好的选择方式。

FlexTasks任务之一是<html-wrapper>任务,该任务恰如其名所示:生成HTML脚手架文件。 实际上,它会生成非常丰富的脚手架文件,并带有JavaScript来自动检测浏览器功能,等等。 尽管描述生成的index.html和swfObject.js代码所做的一切都超出了本文的范围,但可以说,它远远超出了我最初在“ hello.html”中介绍的简单支架,因此要好得多选择。 尤其是当我们可以通过Ant轻轻一按生成它时,如清单3-4所示。

清单3-4:

<project name="MyFirstFlex4App" basedir="." default="compile">
<property file="local.properties" />
<taskdef resource="flexTasks.tasks"
classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />  <target name="init">    <mkdir dir="build" />    <mkdir dir="dist" />  </target>

  <target name="compile" depends="init">    <mxmlc file="src/MyFirstFlex4App.mxml" output="build/MyFirstFlex4App.swf"           compiler.debug="true" />  </target>

  <target name="dist" depends="compile">    <copy file="build/MyFirstFlex4App.swf" todir="dist" />    <html-wrapper title="Hello, Flex" height="640" width="480"                  swf="MyFirstFlex4App" output="dist" />  </target>

  <target name="clean">    <delete dir="build" />    <delete dir="dist" />  </target></project>

摘要

蚱hopper,还有很长的路要走,我们才能抢走鹅卵石:我们要讨论两组UI组件,即输入事件,远程通信,库,一种完整的语言(ActionScript),而这一切之前我们进入了有趣的主题,例如动画和游戏(我个人最喜欢的)和移动设备(有争议的主题)。 幸运的是,我有很多时间来撰写,而Adobe在预算方面还有很多余地可以让我这样做,因此,这只是我们接下来的许多文章(尽管篇幅较短)中的第一个,尽管篇幅较短。从Java开发人员的角度来看Flash。 随着时间的推移,我们将看到Flex和Flash必须提供的所有内容。

但是,正如他们所说,这是另一个故事。

翻译自: https://www.infoq.com/articles/java-developer-guide-flex/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

java的flex开发

java的flex开发_繁忙的Flex Java开发人员指南相关推荐

  1. 李兴华java视频在线观看_李兴华Java开发实战经典视频教程_IT教程网

    资源名称:李兴华Java开发实战经典视频教程 资源目录: [IT教程网]010201_[第2章:简单Java程序]_简单Java程序 [IT教程网]010301_[第3章:Java基础程序设计]_Ja ...

  2. 李兴华java实战经典视频_李兴华Java开发实战经典视频教程

    资源名称:李兴华Java开发实战经典视频教程 资源目录:[一品资源网]010201_[第2章:简单Java程序]_简单Java程序[一品资源网]010301_[第3章:Java基础程序设计]_Java ...

  3. java下拉菜单_薪资对比:Java开发和web前端薪资哪个好

    Web前端开发和Java开发哪个薪资更高,Web前端开发和Java开发发展前景更好? 互联网行业飞速发展,因此有很多小伙伴想要进入IT行业分一杯羹,但是学什么技术更好,哪一个语言的就业薪资更高,就成了 ...

  4. 杭州博圣生物java开发_十天入门java教程 Day02

    1,常量,变量的理解 常量,程序运行过程中,不能改变的,叫常量. 变量,程序运行过程中,改变的,叫变量. 2,变量的理解 变量,用来存储数据的,数据类型,存放哪种数据的种类. 变量的概念:程序运行期间 ...

  5. java list e 查找_源码(04) -- java.util.ListE

    java.util.List 源码分析(JDK1.7) ------------------------------------------------------------------------ ...

  6. java为什么被开发者_为什么开发者对Java 9如此的兴奋

    随着标准 Java 的版本更新,开发者总是可以从升级后的版本中获取想要的功能.那么 Java 9 的发布为什么会让开发者如此的兴奋?下面列出了一些主要原因: 1.模块化的源代码 JDK 源代码将以模块 ...

  7. java主要内存区域_可能是把Java内存区域讲的最清楚的一篇文章

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄 ...

  8. java跟python对比_【多年的Java程序员总结Java与Python的对比 】

    多年的Java程序员总结Java与Python的对比 作为一个有多年职场经验的技术员,每当我遇到同行时,我都会问一句"你现在用的是什么语言?你喜欢用哪种语言?"至于答案,容后再说. ...

  9. gcc是java的什么意思_为什么gcc支持Java而不是C#

    我已经seen this question了,我想知道是否有任何技术理由可以证明gcc支持Java但不支持C#.如果我理解,Java也是一种解释性语言.如果Mono提供C#编译器和CIL的实现,为什么 ...

最新文章

  1. 用Qt开发游戏时一些问题的解决方法(一)
  2. 渣男一般的产品经理长什么样?管过几百产品之后,谈谈如何做好这一行
  3. 【DND图形库】四、文本绘制和按键检测
  4. java实用教程——组件及事件处理——布局的一个小实例
  5. The Coding Kata: FizzBuzzWhizz in Modern C++11
  6. (转载addone)完全使用Linux作为桌面系统 —— 使用Linux两年记 --软件列表
  7. 用友nccloud 虚拟机
  8. AMS1117典型电路
  9. 部门年终总结会议有必要开吗?
  10. 从外观来看微型计算机由哪几个部分组成,福师11春学期《计算机应用基础》在线作业一...
  11. 心形函数的正确打开方式(Unity3D Shader)
  12. 基于脉振高频电流注入的永磁同步电机无感FOC
  13. Unity UGUI DoTween 学习笔记
  14. 趣拿口碑营销,打通线上线下才是真本事!
  15. lc滤波电路电感电容值选择_几种常见的无源滤波电路
  16. 05Linux 第2天 进阶指令
  17. Android 开机动画(bootanimation)启动
  18. 戴尔sc系列存储阵列柜服务器,Dell存储Compellent SC4020
  19. Markdown做笔记或写博客
  20. 水滴公司:左手口碑,右手商业

热门文章

  1. 思科服务器网关配置文件,对 Syslog 服务器与 Cisco IOS 网关的 CDR 登录配置
  2. 微信小程序前台调用讯飞语音识别接口
  3. IDEA几个设置:设置空格显示成小点、显示行数、 Ctrl + 鼠标滚轮 快捷键来控制代码字体大小显示、护眼背景色
  4. postgresql安装后链接报错psql: FATAL: Ident authentication failed for user “postgres“
  5. 界外篇:返回前端订单列表中的订单详情为null,如何去除,如何为空
  6. Flutter中Flexible和Expanded区别
  7. c# 操作ad域用户
  8. 快捷方式管理程序(网吧游戏菜单) SQLite本地数据库
  9. oracle 计算移动平均值,移动平均指标(Moving Averages)
  10. 干了十年的程序员告诉你:这个问题根本没有讨论的必要