Поймать необработанное событие IOErrorEvent во Flash AS3 - PullRequest
12 голосов
/ 15 апреля 2011

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

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

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

Что мне действительно нравится, так это возможность ловить событие независимо от его описания и просто иметь с ним дело ... вроде как

myLoader.addEventListener (IOErrorEvent. *, DealWithError);

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

HTTPStatusEvent.HTTP_STATUS

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

Вся помощь приветствуется.

Ответы [ 4 ]

22 голосов
/ 15 апреля 2011

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

myLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOErrorHandler);
4 голосов
/ 15 апреля 2011

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

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

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

2 голосов
/ 15 апреля 2011

Похоже, 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.");
       }
    }
}
2 голосов
/ 15 апреля 2011

Вы пробовали

loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandlerIOErrorEvent);

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

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...