Quick Tips: Hvordan feilsøke en AS3 Feil # 2044

Quick Tips: Hvordan feilsøke en AS3 Feil # 2044
en
Del
en
Share < .no> Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter Hvordan fikse bugs i Flash.Quick. Tips: Hvordan feilsøke en AS3 Feil # 1063

I denne hurtig Tips, vil vi ta på run- tid Error 2 044, un-håndtert IO feil. Det er faktisk veldig enkelt, men det plager selv erfarne utviklere, så vi vil gå i dybden og slå alle her i IO feil ninjaer


Trinn 1:. Sette opp Problem

La oss starte ved å sette opp noen kode i en Flash-fil som produserer error 2044. Lag en ny AS3 Flash-fil, og skrive inn denne koden i Script panel:
Var loader: Loader = new Loader (); loader.load (ny URLRequest ( "noen-ikke-existant.url"));

Gå videre og kjøre SWF, og du skal se denne feilen:
Feil # 2044: Ubehandlet IOErrorEvent :. text = Feil # 2035: URL Not Found

Du vil se den samme feilen, med en liten variasjon hvis vi bare endre Loader til URLLoader, som i under:
Var loader. URLLoader = new URLLoader (); loader .load (ny URLRequest ("noen-ikke-existant.url"));

Du burde se noe som dette, bare med filbanen reflekterer miljøet:
Feil # 2 044: Ubehandlet ioError :. text = Feil # 2032: Stream Error. URL: file: ////Volumes/Mac%20Pro/Users/dru/Library/Caches/TemporaryItems/non-existant.url på Untitled_fla :: MainTimeline /frame1 ()


Trinn 2: Den tiltalte
< p> Som du kan være i stand til å anta fra det faktum at Error 2044 dukker opp med Loader og URLLoader i bruk, har denne feilen noe å gjøre med lasting av eksterne filer.

Faktisk har feil noe å gjøre med svikt
å laste en ekstern fil. Som falsk nettadresse i mine kodesnutter skulle tilsi, filen vi prøver å laste er å ha et problem av noe slag. Mest sannsynlig er det et tilfelle av filen være uoppnåelig; dette kan bare være en mis-spelt URL, eller en URL blir opprettet dynamisk resulterer i en dårlig plassering, eller fordi serveren eller nettverket er nede for øyeblikket.

Men Error 2 044 er ikke anklage du legger i en dårlig fil. Det kommer til å skje. Vi kan ikke kontrollere nettverket, slik at en last svikt er bundet til å skje på et tidspunkt. Feil 2 044 anklager deg for ikke å være forberedt på når det skjer


Trinn 3:. Good Boy Scouts

Både Loader og URLLoader er hendelses dispatchers, som du bør vite fra å jobbe med dem. Du må benytte Event.COMPLETE begivenhet for å vite når en last er klar for deg å jobbe med det. Hvis du leser dette, selv om du kanskje ikke er klar over at disse laste klassene også sende andre arrangementer, særlig IOErrorEvent.IO_ERROR hendelsen.

Når en Loader eller URLLoader møter en fiasko, slik som beskrevet i forrige trinn, vil det sende et IOErrorEvent.IO_ERROR hendelse. Dette er en spesialisert begivenhet for tilfeller som dette. Det bærer en tekst eiendom som beskriver innholdet i posten, som sett i de feilene vi opprettet i første trinn; begge kodesnutter produsert Feil 2 044, men teksten i hver var annerledes (selv om det var semantisk det samme).

I motsetning til de fleste arrangementer, men når IOErrorEvents sendes klarerings sjekker om det finnes minst en hendelse lytteren. Hvis den ikke finner noe, kaster den un-håndtert IO error

Så løsningen er enkel:. Bare legge en lytter for IOErrorEvent.IO_ERROR arrangementet til lasteren (e). Selv om lytteren ikke gjør noe, vil det i hvert fall undertrykke Error 2044, i kraft av bare eksisterende
Var loader: URLLoader = new URLLoader; loader.load (ny URLRequest ("noen-ikke-eksisterende.. url ")); loader.addEventListener (IOErrorEvent.IO_ERROR, onError), funksjon onError (e: IOErrorEvent): void {//Gjør ingenting}

Husk at du kan legge til aktiviteter til contentLoaderInfo eiendom Stykkgods objekter, ikke til Loader direkte:
Var loader: loader = new Loader (); loader.load (nytt URLRequest("some-non-existant.url"));loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError), funksjon onError (e: IOErrorEvent): void {//Gjør ingenting}

Men du bør være bedre forberedt enn dette, som en speidergutt; du ville ideelt avgjøre hva en passende handling for å ta ville være, og deretter starte den handlingen i tilfelle handler funksjon. Du kan velge å laste inn en "image not found" bilde eller en standard XML-fil i stedet. Du kan presentere et varsel til brukeren å varsle dem om at en nødvendig ressurs ikke kunne lastes, og skal prøve igjen senere. Kanskje du også deaktivere deler av SWF fordi de nødvendige dataene ikke kunne lastes. Du kan selv fyre av en melding til en server-side logg med detaljer, slik at du kan se nærmere på situasjonen.


Det er alt

Som jeg nevnte, er dette en ganske lett, egentlig. Det er bare et spørsmål om å få i vanen med å legge til at hendelseshåndterer i første omgang, slik at du aldri ser Error 2 044 igjen. Det vil ikke hindre ressurs lasting fra sviktende, men det kan la deg degradere og gjenopprette fra fiasko som best du kan.

Takk for lesing. Jeg vil se deg igjen snart i en annen Debug Quick Tips. Anmeldelser