În acest sfat rapid, vom prelua eroarea de execuție 2044, eroarea IO fără manevrare. De fapt, este foarte simplu, dar se întâmplă chiar și cu dezvoltatori experimentați, așa că vom merge în profunzime și vom transforma toată lumea aici în ninja de eroare IO.
Să începem prin configurarea unui cod într-un fișier Flash care produce eroarea 2044. Creați un nou fișier AS3 Flash și introduceți acest cod în panoul Script:
var loader: Loader = încărcător nou (); loader.load (noua adresă URLRequest ("some-non-existent.url"));
Continuați și rulați SWF și ar trebui să vedeți această eroare:
Eroare # 2044: IOErrorEvent nefolosit :. text = Eroare # 2035: URL-ul nu a fost găsit.
Veți observa aceeași eroare, cu o ușoară variație dacă doar ne schimbăm Încărcător
la URLLoader
, după cum urmează:
var încărcător: URLLoader = nou URLLoader (); loader.load (noua adresă URLRequest ("some-non-existent.url"));
Ar trebui să vedeți ceva de genul acesta, numai cu calea fișierului care reflectă mediul dvs.:
Eroare # 2044: ioError:. text = Eroare # 2032: Eroare în flux. URL: fișier: ////Volumes/Mac%20Pro/Users/dru/Library/Caches/TemporaryItems/non-existant.url la Untitled_fla :: MainTimeline / frame1 ()
Așa cum s-ar putea să vă puteți baza la faptul că eroarea 2044 se întâlnește cu Încărcător
și URLLoader
în uz, această eroare are legătură cu încărcarea fișierelor externe.
De fapt, eroarea are ceva de a face cu eșec pentru a încărca un fișier extern. După cum a sugerat adresa URL falsă din fragmentele mele de cod, fișierul pe care încercăm să-l încărcăm are o problemă de un fel. Cel mai probabil este cazul unui dosar care nu poate fi găsit; aceasta ar putea fi pur și simplu o adresă URL greșită, sau o adresă URL creată în mod dinamic, rezultând într-o locație defectuoasă sau din cauză că serverul sau rețeaua este în prezent oprită.
Cu toate acestea, eroarea 2044 nu vă acuză că ați încărcat un fișier defect. Asta se va întâmpla. Nu putem controla rețeaua, deci o eșec de încărcare este obligatoriu să se întâmple la un moment dat. Eroarea 2044 te acuză că nu te pregătești când se întâmplă asta.
Ambii Încărcător
și URLLoader
sunt dispecerii evenimentului, așa cum ar trebui să știți din lucrul cu ei. Trebuie să utilizați Event.COMPLETE
eveniment pentru a afla când este pregătită o sarcină pentru a lucra cu ea. Dacă citiți acest lucru, este posibil să nu realizați că aceste clase de încărcare trimit și alte evenimente, în special cele de IOErrorEvent.IO_ERROR
eveniment.
Când un Încărcător
sau URLLoader
întâmpină un eșec, cum este descris în etapa anterioară, va trimite un mesaj IOErrorEvent.IO_ERROR
eveniment. Acesta este un eveniment specializat pentru astfel de cazuri. Are un a text
proprietate care descrie natura erorii, așa cum se vede în erorile pe care le-am creat în primul pas; ambele fragmente de cod au produs Eroare 2044, dar textul fiecăruia era diferit (chiar dacă era semantic la fel).
Spre deosebire de majoritatea evenimentelor, deși, când IOErrorEvent
s expediază, dispecerul verifică existența a cel puțin unui ascultător al evenimentului. Dacă nu găsește niciunul, aruncă eroarea IO fără manevrare.
Deci, soluția este simplă: pur și simplu adăugați un ascultător pentru IOErrorEvent.IO_ERROR
eveniment la încărcător (e). Chiar dacă ascultătorul nu face nimic, va suprima cel puțin Eroarea 2044, în virtutea faptului că există doar.
var încărcător: URLLoader = nou URLLoader; loader.load (noua adresă URLRequest ("some-non-existent.url")); loader.addEventListener (IOErrorEvent.IO_ERROR, peError); funcția onError (e: IOErrorEvent): void // Nu face nimic
Amintiți-vă că adăugați evenimente la contentLoaderInfo
proprietatea Încărcător
obiecte, nu la Încărcător
direct:
var loader: Loader = încărcător nou (); loader.load (noua adresă URLRequest ("some-non-existent.url")); loader.contentLoaderInfo.addEventListener (IOErrorEvent.IO_ERROR, peError); funcția onError (e: IOErrorEvent): void // Nu face nimic
Cu toate acestea, ar trebui să fii mai bine pregătită decât asta, ca un cercetaș băiat; ați stabili în mod ideal ce ar fi o acțiune adecvată, apoi începeți această acțiune în cadrul funcției de gestionare a evenimentelor. Ați putea decide să încărcați o imagine? Nu a fost găsită? imagine sau un fișier XML implicit. S-ar putea să prezentați o avertizare utilizatorului informându-i că o resursă cerută nu a putut fi încărcată și ar trebui să încercați din nou mai târziu. Poate că dezactivați, de asemenea, părți din SWF, deoarece datele solicitate nu au putut fi încărcate. S-ar putea chiar să declanșați un mesaj pe un jurnal de pe server cu detalii, astfel încât să puteți privi situația.
După cum am menționat, este destul de ușor, într-adevăr. Este doar o chestiune de a obtine obiceiul de a adauga acel handler de evenimente in primul rand, astfel incat sa nu mai vezi niciodata Eroarea 2044. Acesta nu va împiedica încărcarea de resurse din eșec, dar vă poate permite să vă degradați grațios și să vă recuperați din eșec cât mai bine posibil.
Vă mulțumim pentru lectură. Ne vedem din nou într-un alt sfat rapid de depanare.