应用程序退出时禁用air 2.0,调用preventDefault

时间:2010-11-12 08:25:01

标签: flex air

尝试阻止应用程序在单击X按钮时关闭,它仍然关闭,但AIR进程正在任务管理器中运行。代码有什么问题?

申请表完成:

NativeApplication.nativeApplication.addEventListener(Event.EXITING, onExiting);

结束代码:

private function onExiting(e:Event):void
{
e.preventDefault();
}

2 个答案:

答案 0 :(得分:4)

试试Event.CLOSING。这是我用来取消关闭的。

删除窗口后发生

Event.EXITING,并且仅用于清理,而不是阻止应用程序关闭。

来自docs

  

在Windows上,你唯一能得到的   退出事件是在关闭之后   最后一个窗口(当autoExit = true时)。


示例“unclosable”应用程序:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       initialize="init()">
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;

            private function init():void{
                this.addEventListener(Event.CLOSING, function(e:Event):void{
                    e.preventDefault();
                    Alert.show('Unclosable!');
                });
            }
        ]]>
    </fx:Script>
</s:WindowedApplication>
祝你好运,
阿林

答案 1 :(得分:0)

警报消息处理发生在与应用程序线程不同的线程中,因此应用程序不会等待警报消息框。诀窍是拥有一个初始化值为false的全局变量。在关闭事件处理程序时,如果值未更改为true,则取消关闭事件。这允许显示警报消息。如果用户按下是,则将变量设置为true,然后再次触发退出功能。

        private var boolExit:Boolean=false;

        private function alertClickHandler(event:CloseEvent):void{
            if(event.detail==Alert.YES){
                boolExit=true;
                NativeApplication.nativeApplication.exit();
            }

        }


        private function AppExit(e:Event):void{
            if(!boolExit)
                e.preventDefault();

            Alert.show("Do you want to exit application?",
                "Exit Confirmation",
                Alert.YES|Alert.NO,null,
                alertClickHandler
                );
        }

        public function init():void
        {
           . . . 
           this.addEventListener(Event.CLOSING,AppExit);
           . . .
        }