Yevgeny Simkin
Yevgeny Simkin

Reputation: 28419

Catching an unhandled IOErrorEvent in Flash AS3

Error #2044: Unhandled IOErrorEvent:. text=Error #2036: Load Never Completed.

That's what I see every time I try to load an image that doesn't exist using a Loader. I'm getting a list of URLs and can't validate if they're pointing to anything useful. Whenever it encounters a 404 it gives me that error.

I have tried to catch the error with every available IOErrorEvent there is (there are 7 of them),but none of them seem to capture the 404. Is there some other network event that I can be looking for to catch this condition?! I feel like I'm missing something obvious.

What I'd really like is to be able to catch the event regardless of its description and just deal with it... sort of like

myLoader.addEventListener(IOErrorEvent.*, dealWithError);

But that's illegal. I even tried catching

HTTPStatusEvent.HTTP_STATUS

but that never calls back because, I guess, it gets the HTTP status after it deals with the error events, so, as it fails on the "unhandled" error event, it just gets lost. Are there events that aren't in the IDE that I'm overlooking?

All help appreciated.

Upvotes: 14

Views: 22518

Answers (4)

Adam Harte
Adam Harte

Reputation: 10530

You must listen for the IOErrorEvent.IO_ERROR of your URLLoader object.

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

If you trace the event object, then it should give you some information about what is going on.

Upvotes: 5

The_asMan
The_asMan

Reputation: 6403

Have you tried

loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandlerIOErrorEvent);

[EDIT]
Also include contentLoaderInfo events?

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

Upvotes: 2

Jason Towne
Jason Towne

Reputation: 8050

It looks like IOErrorEvent.IO_ERROR should work. Also make sure you're using a URLLoader to retrieve the image.

Based on the example from the comments:

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.");
       }
    }
}

Upvotes: 2

Michiel Standaert
Michiel Standaert

Reputation: 4176

if you are using a loader; try adding the eventListener to the contentLoaderInfo of the loader, e.g.

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

Upvotes: 23

Related Questions