AIR2.0入门教程[三]:与本地进程的数据通讯
2010-12-29 23:19
337 查看
http://www.riameeting.com/node/487
在前两篇文章中,我们了解了AIR2.0Beta带来的新特性,以及AIR2.0中的拖拽增强,现在我们来看AIR2.0另一个非常有用的新特性:可以启动本地进程并与本地进程进行数据通讯。
我们可以调用NativeProcess.isSupported,来判断我们的AIR应用是否支持运行本地进程,如果你的应用是以.air部署的,那么就会得到值为false。
要运行本地进程,我们需要创建一个NativeProcess类的实例,并调用它的start
方法来启动一个进程,与这个类配合工作的还有NativeProcessStartupInfo类,我们也要创建这个类的实例,并指定可运行的exe文件(windows下)。
在下面的例子中,我们还将讲解如何打包一个AIR应用为一个本地安装文件,并且了解如何使用标准的输入输出(STDIN和STDOUT)流来通讯。
如果你已经具备了一些C++语言的编程知识,那理解这篇文章就更容易一些。
本文涉及的源码下载:
AIR项目源码下载
将编译后的exe文件保存好,一会儿会用到。
SDK的版本(在第一篇文章中有介绍),然后打开AIR的配置XML文件,添加下面的一行:
<supportedProfiles>extendedDesktop</supportedProfiles>
这是必须的,否则你的AIR应用将无法执行本地进程。
然后用下面的代码替换掉你的主文件的代码,代码中我们调取C++来计算一个从m到n的累加计算,并提供了用AS3计算的机制,来做对比。当然,结果没有悬念,C++轻松胜出,我们可以从中启发一些想法,比如将AIR应用中计算复杂的一些工作交给本地进程来做,以获得更高的执行效率。请着重参考中间的进程调取部分(中文注释):
然后将下载的源码解压,找到位于NativeApp/Windows/bin下面的exe文件,复制到你的项目目录中,并更改代码部分相应的位置定义。
编译项目,如果配置没有错误,会得到如下图所示的界面,你可以点击计算按钮,观测从C++返回的数据。然后点击AS3计算方式,做一下对比。
下面我们来把这个应用打包为本地安装文件。
首先需要配置你的电脑环境,选择“我的电脑”,点右键选择“属性”,然后找到高级设置里的环境变量,在系统变量的PATH部分,添加一行:C:/Program
Files/Adobe/Adobe Flash Builder Beta
2/sdks/3.4.1/bin。注意这个路径应该包含了adt.exe的位置,请以自己电脑实际情况为准。
运行CMD,输入adt,按下回车,如果有帮助信息输入,则代表配置成功
将我们刚才创建的AIR项目打包为.air文件,最后会因为配置修改有个错误,忽略即可
执行CD命令,进入你要保存打包后exe文件的目录,然后输入adt -package -target native demo.exe
e:/project/air/simple/bin/demo.air
以上请以自己的实际路径为准
End
在前两篇文章中,我们了解了AIR2.0Beta带来的新特性,以及AIR2.0中的拖拽增强,现在我们来看AIR2.0另一个非常有用的新特性:可以启动本地进程并与本地进程进行数据通讯。
了解NativeProcess
在AIR2中,我们可以打包一个AIR应用为本地安装文件,比如在Windows下面是.exe,在Mac系统下是.dmg,这样我们的AIR应用就具备了运行一个本地进程并与之交互的能力。要实现这个功能,需要使用NativeProcess类。这是AIR2中出现的一个新的类。我们可以调用NativeProcess.isSupported,来判断我们的AIR应用是否支持运行本地进程,如果你的应用是以.air部署的,那么就会得到值为false。
要运行本地进程,我们需要创建一个NativeProcess类的实例,并调用它的start
方法来启动一个进程,与这个类配合工作的还有NativeProcessStartupInfo类,我们也要创建这个类的实例,并指定可运行的exe文件(windows下)。
在下面的例子中,我们还将讲解如何打包一个AIR应用为一个本地安装文件,并且了解如何使用标准的输入输出(STDIN和STDOUT)流来通讯。
如果你已经具备了一些C++语言的编程知识,那理解这篇文章就更容易一些。
本文涉及的源码下载:
AIR项目源码下载
准备和编译C++应用
在这个示例中,我们会创建一个C++的程序文件,你可以使用VS或其它你熟悉的工具来编译这个类文件为exe文件,这个文件的代码部分很简单,就是执行从m到n的累加,然后将计算的结果通过标准输入输出返回。如果你不能编译也不必担心,这个例子的源码中已经包含了编译后的exe文件。#include <iostream>using namespace std;void main (void){ int a,b; int c=100; cin>>a>>b; for(int i=a;i<b;i++) { c+=i; } cout<<c<<endl;}
将编译后的exe文件保存好,一会儿会用到。
创建AIR应用
使用Flex Builder创建一个AIR项目,注意选择SDK为包含AIR2SDK的版本(在第一篇文章中有介绍),然后打开AIR的配置XML文件,添加下面的一行:
<supportedProfiles>extendedDesktop</supportedProfiles>
这是必须的,否则你的AIR应用将无法执行本地进程。
然后用下面的代码替换掉你的主文件的代码,代码中我们调取C++来计算一个从m到n的累加计算,并提供了用AS3计算的机制,来做对比。当然,结果没有悬念,C++轻松胜出,我们可以从中启发一些想法,比如将AIR应用中计算复杂的一些工作交给本地进程来做,以获得更高的执行效率。请着重参考中间的进程调取部分(中文注释):
<?xml version="1.0" encoding="utf-8"?><mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="init()" layout="absolute" width="356" height="347"> <mx:Script> <!--[CDATA[ import flash.events.MouseEvent; private var process:NativeProcess; [Bindable] private var resultData:String; [Bindable] private var cerData:String; private var startDate:Date; private var endDate:Date; public function init():void { if (NativeProcess.isSupported)//判断是否支持调取本地进程 { launchEchoTest(); } else { resultData = "NativeProcess not supported."; } } public function launchEchoTest():void//这个方法初始化的时候即执行,运行exe文件,等待输入参数 { var file:File = File.applicationDirectory;//创建File对象 file = file.resolvePath("NativeApps/Windows/bin/TestCCC.exe");//指向你的exe文件 var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();//创建进程信息对象 nativeProcessStartupInfo.executable = file;//将file指定为可执行文件 process = new NativeProcess();//创建一个本地进程 process.start(nativeProcessStartupInfo);//运行本地进程 process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);//侦听进程的输出信息 process.addEventListener(ProgressEvent.STANDARD_INPUT_PROGRESS, inputProgressListener);//侦听进程的输入信息 } public function writeData():void { process.standardInput.writeUTFBytes(num1.text + "/n");//C++方法中需要的两个输入,从这里写入 process.standardInput.writeUTFBytes(num2.text + "/n"); } public function inputProgressListener(event:ProgressEvent):void { process.closeInput();//关闭输入 } public function onOutputData(event:ProgressEvent):void { resultData = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable);//获取进程返回的数据 endDate = new Date(); cerData = endDate.time - startDate.time + "";//计算时间差值 launchEchoTest();//再次启动进程,并等待输入 } protected function button1_clickHandler(event:MouseEvent):void { startDate = new Date(); if(radiogroup1.selectedValue == 0) { trace("use c++"); writeData(); } else { trace("use as3");//使用AS3(AVM)来执行计算 var a:uint = uint(num1.text); var b:uint = uint(num2.text); var c:uint = 0; for(var i:uint = a;i<b;i++) { c+=i; } resultData = c+""; endDate = new Date(); cerData = endDate.time - startDate.time + ""; } } ]]--> </mx:Script> <mx:Panel width="336" height="317" layout="absolute" x="10" y="10" title="AIR结合C++实例"> <mx:TabNavigator x="10" y="10" width="296" height="257"> <mx:Canvas label="从m到n的累加计算测试" width="100%" height="100%"> <mx:Form x="0" y="0" width="100%" height="100%"> <mx:FormItem label="数字1"> <mx:TextInput id="num1" text="1"/> </mx:FormItem> <mx:FormItem label="数字2"> <mx:TextInput id="num2" text="100000000"/> </mx:FormItem> <mx:FormItem> <mx:RadioButtonGroup id="radiogroup1"/> <mx:RadioButton label="使用C++计算" value="0" groupName="radiogroup1" selected="true"/> <mx:RadioButton label="使用AS3计算" value="1" groupName="radiogroup1"/> <mx:Button label="执行累加计算" click="button1_clickHandler(event)"/> </mx:FormItem> <mx:FormItem label="结果"> <mx:Label text="{resultData}" id="l1"/> </mx:FormItem> <mx:FormItem label="计算时间"> <mx:Label text="{cerData}" id="l2"/> </mx:FormItem> </mx:Form> </mx:Canvas> </mx:TabNavigator> </mx:Panel></mx:WindowedApplication>
然后将下载的源码解压,找到位于NativeApp/Windows/bin下面的exe文件,复制到你的项目目录中,并更改代码部分相应的位置定义。
编译项目,如果配置没有错误,会得到如下图所示的界面,你可以点击计算按钮,观测从C++返回的数据。然后点击AS3计算方式,做一下对比。
下面我们来把这个应用打包为本地安装文件。
打包为本地安装文件(EXE)
打包过程,请遵循下面的步骤:首先需要配置你的电脑环境,选择“我的电脑”,点右键选择“属性”,然后找到高级设置里的环境变量,在系统变量的PATH部分,添加一行:C:/Program
Files/Adobe/Adobe Flash Builder Beta
2/sdks/3.4.1/bin。注意这个路径应该包含了adt.exe的位置,请以自己电脑实际情况为准。
运行CMD,输入adt,按下回车,如果有帮助信息输入,则代表配置成功
将我们刚才创建的AIR项目打包为.air文件,最后会因为配置修改有个错误,忽略即可
执行CD命令,进入你要保存打包后exe文件的目录,然后输入adt -package -target native demo.exe
e:/project/air/simple/bin/demo.air
以上请以自己的实际路径为准
End
相关文章推荐
- AIR2.0入门教程:与本地进程的数据通讯
- AIR2.0入门教程 与本地进程的数据通讯
- [AIR] 与本地进程(应用程序)进行通讯
- AIR2.0入门教程:与Java应用交互
- AIR2.0入门教程:新特性介绍以及开发环境的配置
- AIR2.0入门教程: ServerSocket -(1) Socket简介
- AIR2.0入门教程: ServerSocket -(2) ServerSocket
- AIR2.0入门教程: ServerSocket -(3) ServerSocket例子
- ASP小偷(远程数据获取)程序的入门教程
- 云星数据---Scala实战系列(精品版)】:Scala入门教程018-Scala实战源码-Scala内部类
- Python 数据科学入门教程:OpenCV
- [导入]ASP.NET 2.0快速入门(10):ASP.NET 2.0 数据传送机制
- Android基础入门教程——6.2 数据存储与访问之——SharedPreferences保存用户偏好参数
- 【入门教程】SequoiaDB+Postgresql数据实时检索最佳实践
- Scott Mitchell 的ASP.NET 2.0数据教程之二十三:基于用户对修改数据进行限制
- Scott Mitchell 的ASP.NET 2.0数据教程之四十一::实现开放式并发
- DLL入门浅析(5)——使用DLL在进程间共享数据
- silverlight 2.0 入门教程(三)
- 云星数据---Scala实战系列(精品版)】:Scala入门教程025-Scala实战源码-Scala 的特质 (接口)01
- Scott Mitchell 的ASP.NET 2.0数据教程之三十五:: 使用Repeater和DataList实现的主/从报表