Глобальный обработчик ошибок для Flash Player 10.1 не работает - PullRequest
2 голосов
/ 23 июля 2010

Попытка внедрить новый обработчик ошибок FP 10.1 Global в мои проекты, но независимо от того, что я делаю, любая необнаруженная ошибка все равно покажет окно исключения (как в отладочной, так и в выпускной версиях SWF). Все, что я хочу сделать, это предотвратить эти всплывающие окна, а вместо этого отправить сообщение в мой регистратор. Вот мой код ...

РЕДАКТИРОВАТЬ: я упростила код сейчас. Может ли кто-нибудь оказать мне услугу, проверить следующий класс и посмотреть, работает ли он для него? Потому что это не для меня! ...

package
{
    import flash.display.Sprite;
    import flash.events.UncaughtErrorEvent;    

    public class GlobalErrorHandlerTest extends Sprite
    {
        public function GlobalErrorHandlerTest()
        {
            stage.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);
            throw new Error();
        }           

        private function onUncaughtError(e:UncaughtErrorEvent):void 
        {
            var message:String;
            if (e.error["message"])
            {
                message = e.error["message"];
            }
            else if (e.error["text"])
            {
                message = e.error["text"];
            }
            else
            {
                message = e.error["toString"]();
            }

            trace("Uncaught Error: " + e.text);
        }
    }
}

Ответы [ 4 ]

1 голос
/ 23 августа 2010

В документах говорится, что:

Объект UncaughtErrorEvents, отправляющий событие, связан либо с объектом LoaderInfo, либо с объектом Loader.

Таким образом, вы должны слушатьсвойство loaderInfo uncaughtErrorEvents вашего верхнего экранного объекта:

loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
1 голос
/ 11 апреля 2011

У меня была та же проблема, что и выше - я ссылался на stage.loadInfo, полагая, что, поскольку он ссылается на сцену, он уловит все необъяснимые ошибки.Тем не менее, это не работает, вы должны фактически следовать предложению grapefukt дословно: на фактическом базовом экранном объекте поместите код

loaderInfo.uncaughtErrorEvents.add...

Когда вы пытаетесь поместить на stage.loaderInfo или frame.loaderInfo, это не имеет никакого эффекта.

В моем случае мне пришлось поместить его в класс, который расширил базовый экранный объект.Очень странно.

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

ОБНОВЛЕНИЕ: Я думаю, я могу знать, почему вы думаете, что это не работает.Я сделал ошибку тестирования внутри отладчика.Когда отладчик остановился на ошибках во время выполнения, я предположил, что это доказало, что моя функция uncaughtErrorHandler не работает.На самом деле это было по ошибке.Это просто причуда отладчика.Отладчик по-прежнему останавливается, как если бы это была необработанная ошибка или исключение, но если вы снова нажмете «Выполнить», вы увидите, что он выполняет код обработки ошибок.См. Мою ветку Flex 4.0 / 4.5, глобальная обработка ошибок для получения дополнительной информации.

Исходный ответ: Я ищу эту же информацию.Ни один из примеров в документации API, ни различные блоги на эту тему не работают для меня.Я пробовал только loaderInfo, stage.loaderInfo, systemManager.loaderInfo ... Это не имеет значения.Я даже попробовал их все в одном тестовом случае!Устанавливаются addEventListener, но неперехваченные ошибки не запускают uncaughtErrorHandler.Argh.Я потратил слишком много времени на это!Я сократил его до очень простой программы, очень похожей на описанную выше, за исключением всего кода в основном файле mxml.

Как насчет этого: кто-то может опубликовать пример глобальной обработки ошибок, который работает?Я использую Flex SDK 4.1 (я также пробовал с 4.5), ориентируясь на FP 10.1 (или 10.2 для 4.5), в mx: основанном на приложении mxml проекте Flex.

Моя тема: Обработка глобальных ошибок Flex 4.0 / 4.5

0 голосов
/ 23 июля 2010

Вы должны настроить слушателя не для конкретного представления, а для объекта основной сцены, так как он находится вверху списка отображения (таким образом, выбирая любое исключение любого из его дочерних элементов).

...