我们知道用任何一个桌面应用程序在关闭前都会有收尾工作,比如:记录用户操作状态、是否保存已经编辑过的文件等。
如果是在C#或者Java中,这种操作很方便,因为需要用户操作时程序会停止等待用户操作,直到操作完成后才继续执行程序,但是AS3不是这样的,AS3 的事件执行时不会因为等待用户操作而停止执行,AS3就像一从来都不知道等待的家伙(其实AS3没有等待也是正常现象,因为我们知道flash player是单线程的,如果要等待用户操作的话,那么整个程序就没法执行其它的任务了)。所以处理事件稍微有点麻烦。
下面我们用一个例子来说明如何在AIR程序关闭前弹出一个对话框来响应用户的操作。
打开FlexBuilder,新建一个Flex Project,如下图所示:
然后在弹出的对话框中选择“desktop application”,如下图所示:
然后点击“确定”就创建了一个AIR工程,在生成的主文件里写入以下代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication addedToStage="init();" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import mx.controls.Alert;
private function init():void{
stage.nativeWindow.addEventListener(Event.CLOSING,closing);
}
private function closing(event:Event):void{
//取消事件的默认行为,在实际使用时可以指定条件来执行这句话
event.preventDefault();
Alert.show("您确定要关闭窗口吗?","关闭窗口提示",Alert.YES|Alert.NO,this,closeHandler);
}
private function closeHandler(event:CloseEvent):void{
event.detail==Alert.YES?stage.nativeWindow.close():null;
}
]]>
</mx:Script>
</mx:WindowedApplication>
按F11来调试我们的程序,可以试试关闭窗体时的程序收尾工作是否有效。