air 2.0 при выходе из приложения вызывает callDefault - PullRequest
3 голосов
/ 12 ноября 2010

Попытка запретить завершение работы приложения при нажатии кнопки X, она все еще закрывается, но в диспетчере задач выполняется процесс AIR. Что не так с кодом?

Заявка завершена:

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

Код закрытия:

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

Ответы [ 2 ]

4 голосов
/ 12 ноября 2010

Попробуйте Event.CLOSING. Это то, что я использую для отмены закрытия.

Event.EXITING происходит после удаления окна и должно использоваться только для очистки, а не для предотвращения закрытия приложения.

Из документов :

В Windows единственный раз, когда вы получите выходное событие происходит после закрытия последнее окно (когда autoExit = true).


Пример "незапираемого" приложения:

<?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>

Удачи,
Alin

0 голосов
/ 31 декабря 2015

Обработка предупреждающих сообщений происходит в потоке, отличном от потока приложения, поэтому приложение не ожидает окно сообщения с предупреждением.Хитрость заключается в том, чтобы иметь глобальную переменную с инициализированным значением false.В обработчике событий для закрытия отмените событие закрытия, если значение не изменено на 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);
           . . .
        }
...