我们知道用任何一个桌面应用程序在关闭前都会有收尾工作,比如:记录用户操作状态、是否保存已经编辑过的文件等。
        如果是在C#或者Java中,这种操作很方便,因为需要用户操作时程序会停止等待用户操作,直到操作完成后才继续执行程序,但是AS3不是这样的,AS3 的事件执行时不会因为等待用户操作而停止执行,AS3就像一从来都不知道等待的家伙(其实AS3没有等待也是正常现象,因为我们知道flash player是单线程的,如果要等待用户操作的话,那么整个程序就没法执行其它的任务了)。所以处理事件稍微有点麻烦。
下面我们用一个例子来说明如何在AIR程序关闭前弹出一个对话框来响应用户的操作。
        打开FlexBuilder,新建一个Flex Project,如下图所示:

AIR处理窗体关闭事件(在窗体关闭前提示用户做收尾工作)
        然后在弹出的对话框中选择“desktop application”,如下图所示:

AIR处理窗体关闭事件(在窗体关闭前提示用户做收尾工作)

        然后点击“确定”就创建了一个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来调试我们的程序,可以试试关闭窗体时的程序收尾工作是否有效。

相关文章: