Flex 4.0 / 4.5 глобальная обработка ошибок - PullRequest
1 голос
/ 17 мая 2011

Я пытаюсь использовать новый (ish) AS3 глобальный класс обработки ошибок.Я пытаюсь использовать его в приложении Flex mxml.Я не могу заставить его работать на всех.Ниже приведена целая программа, которая показывает проблему.Я установил это для использования Flash Player 10.2 и скомпилировал с Flex 4.5 SDK.

Я пытался использовать Flex SDK 4.0 и 4.5, но я получаю ошибку в любом случае.Я должен упустить что-то очевидное здесь.Это обычный SWF-файл Flex, который будет отображаться на веб-странице.Предполагая, что я могу импортировать UncaughtErrorEvent, я бы затем сделал что-то вроде этого для настройки обработчика событий:

    if(systemManager.loaderInfo.hasOwnProperty("uncaughtErrorEvents")) {                   
        IEventDispatcher(
            systemManager.loaderInfo["uncaughtErrorEvents"]).addEventListener(
               "uncaughtError", uncaughtErrorHandler);
    }

это все кажется ужасно грязным, но я мог бы с этим смириться, за исключением того, что он не работает!Я просмотрел сеть и не могу найти никаких документов или примеров, которые объясняют, как заставить это работать в моем контексте.Любой совет?

Полная программа:

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="onApplicationComplete();"
                   >
        <fx:Declarations>
            <!-- Place non-visual elements (e.g., services, value objects) here -->
        </fx:Declarations>
        <fx:Script>
            <![CDATA[
                private function onApplicationComplete() : void {
                    systemManager.loaderInfo.uncaughtErrorEvents.addEventListener("uncaughtError", uncaughtErrorHandler);
                }
                private function uncaughtErrorHandler(event:Event) : void {
                    trace(event.toString());
                }
            ]]>
        </fx:Script>
        <s:Button x="153" y="64" label="Trigger Error" id="triggerButton" click="throw new Error('myError')"/>
    </s:Application>

Ответы [ 2 ]

3 голосов
/ 09 июня 2011
    <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"
                           uncaughtError="uncaughtErrorHandler(event)" />

Легкий путь ...

2 голосов
/ 17 мая 2011

Взять из API (который я рекомендую вам просмотреть в следующий раз):

<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/halo"
                       applicationComplete="applicationCompleteHandler();">

    <fx:Script>
        <![CDATA[
            import flash.events.ErrorEvent;
            import flash.events.MouseEvent;
            import flash.events.UncaughtErrorEvent;

            private function applicationCompleteHandler():void
            {
                loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
            }

            private function uncaughtErrorHandler(event:UncaughtErrorEvent):void
            {
                if (event.error is Error)
                {
                    var error:Error = event.error as Error;
                    // do something with the error
                }
                else if (event.error is ErrorEvent)
                {
                    var errorEvent:ErrorEvent = event.error as ErrorEvent;
                    // do something with the error
                }
                else
                {
                    // a non-Error, non-ErrorEvent type was thrown and uncaught
                }
            }

            private function clickHandler(event:MouseEvent):void
            {
                throw new Error("Gak!");
            }
        ]]>
    </fx:Script>

    <s:Button label="Cause Error" click="clickHandler(event);"/>
</s:WindowedApplication>
...