Подтвердить что ты не робот

Захват необработанного IOErrorEvent во Flash AS3

Ошибка # 2044: необработанный IOErrorEvent:. text = Ошибка # 2036: загрузка никогда не завершена.

Это то, что я вижу каждый раз, когда я пытаюсь загрузить изображение, которое не существует с помощью Loader. Я получаю список URL-адресов и не могу подтвердить, указывают ли они на что-нибудь полезное. Всякий раз, когда он встречает 404, он дает мне эту ошибку.

Я попытался поймать ошибку с каждым доступным IOErrorEvent (их 7), но ни один из них, похоже, не захватил 404. Есть ли какое-то другое сетевое событие, которое я могу найти, чтобы поймать это условие?! Я чувствую, что мне не хватает чего-то очевидного.

Мне бы очень хотелось, чтобы вы могли поймать событие независимо от его описания и просто справиться с ним... вроде как

myLoader.addEventListener(IOErrorEvent. *, dealWithError);

Но это незаконно. Я даже пытался поймать

HTTPStatusEvent.HTTP_STATUS

но это никогда не перезвонит, потому что, я думаю, он получает статус HTTP после того, как он имеет дело с событиями ошибки, поэтому, поскольку он не работает на "необработанном" событии ошибки, он просто теряется. Есть ли события, которых нет в IDE, которые я пропускаю?

Вся помощь оценивается.

4b9b3361

Ответ 1

если вы используете загрузчик; попробуйте добавить eventListener в contentLoaderInfo загрузчика, например.

myLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOErrorHandler);

Ответ 2

Вы должны прослушать IOErrorEvent.IO_ERROR вашего URLLoader.

urlLoader.addEventListener(IOErrorEvent.IO_ERROR, loaderIOErrorHandler);
function loaderIOErrorHandler(errorEvent:IOErrorEvent):void{
    trace("ioErrorHandler: " + errorEvent);
}

Если вы отслеживаете объект события, тогда он должен предоставить вам некоторую информацию о том, что происходит.

Ответ 3

Вы пробовали

loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandlerIOErrorEvent);

[EDIT]
Также включают события contentLoaderInfo?

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler );

Ответ 4

Похоже, IOErrorEvent.IO_ERROR должен работать. Также убедитесь, что вы используете URLLoader для извлечения изображения.

На основе примера из комментариев:

package {

    import flash.display.Sprite;
    import flash.utils.ByteArray;
    import flash.display.Loader;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.net.URLLoaderDataFormat;
    import flash.geom.Rectangle;
    import flash.events.Event;

    public class Main extends Sprite {

        private var urlLoader:URLLoader = new URLLoader();

        public function Main() {
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            urlLoader.load(new URLRequest("http://www.java2s.com/image2.jpg"));

           urlLoader.addEventListener(Event.COMPLETE, completeHandler);
           urlloader.addEventListener(IOErrorEvent.IO_ERROR, imageNotFound);
       }

       private function completeHandler(event:Event):void {
           var loader:Loader = new Loader();
           loader.loadBytes(urlLoader.data);
           addChild(loader);
       }

       private function imageNotFound(ev:Event):void{
        trace("File not found.");
       }
    }
}