In questo suggerimento rapido, utilizzeremo l'errore 2044 di run-time, l'errore IO non gestito. In realtà è molto semplice, ma affligge anche sviluppatori esperti, quindi approfondiremo e trasformeremo tutti qui in ninja di errori di I / O.
Iniziamo impostando del codice in un file Flash che genera l'errore 2044. Crea un nuovo file Flash AS3 e inserisci questo codice nel pannello Script:
var loader: Loader = new Loader (); loader.load (new URLRequest ("some-non-existant.url"));
Vai avanti ed esegui il file SWF e dovresti vedere questo errore:
Errore 2044: IOErrorEvent non gestito :. text = Errore # 2035: URL non trovato.
Vedrai lo stesso errore, con una leggera variazione se cambiamo caricatore
a URLLoader
, come in seguito:
var loader: URLLoader = new URLLoader (); loader.load (new URLRequest ("some-non-existant.url"));
Dovresti vedere qualcosa di simile, solo con il percorso del file che riflette il tuo ambiente:
Errore 2044: ioError non gestito :. text = Error # 2032: Stream Error. URL: file: ////Volumes/Mac%20Pro/Users/dru/Library/Caches/TemporaryItems/non-existant.url a Untitled_fla :: MainTimeline / frame1 ()
Come si potrebbe essere in grado di supporre dal fatto che l'errore 2044 affiora caricatore
e URLLoader
in uso, questo errore ha a che fare con il caricamento di file esterni.
In realtà, l'errore ha qualcosa a che fare con il fallimento caricare un file esterno. Come suggerito dal falso URL nei miei frammenti di codice, il file che stiamo tentando di caricare ha un problema di qualche tipo. Molto probabilmente si tratta di un caso in cui il file non è raggiungibile; questo potrebbe semplicemente essere un URL errato, o un URL creato in modo dinamico risultante in una posizione errata, o perché il server o la rete non è al momento.
Tuttavia, l'errore 2044 non accusa il caricamento di un file non valido. Questo succederà. Non possiamo controllare la rete, quindi a un certo punto si verificherà un errore di caricamento. Errore 2044 ti sta accusando di non essere preparato per quando ciò accade.
Tutti e due caricatore
e URLLoader
sono spedizionieri di eventi, come dovresti sapere lavorando con loro. È necessario utilizzare il Event.COMPLETE
evento per sapere quando un carico è pronto per il tuo lavoro. Se stai leggendo questo, però, potresti non capire che queste classi di caricamento spediscono anche altri eventi, in particolare il IOErrorEvent.IO_ERROR
evento.
Quando un caricatore
o URLLoader
incontra un errore, come descritto nel passaggio precedente, invierà un IOErrorEvent.IO_ERROR
evento. Questo è un evento specializzato per casi come questo. Porta a testo
proprietà che descrive la natura dell'errore, come mostrato negli errori che abbiamo creato nel primo passaggio; entrambi i snippet di codice hanno prodotto l'errore 2044, ma il testo di ciascuno era diverso (anche se semanticamente era lo stesso).
A differenza della maggior parte degli eventi, però, quando IOErrorEvent
Se vengono inviati, il dispatcher verifica l'esistenza di almeno un listener di eventi. Se non ne trova, genera l'errore IO non gestito.
Quindi la soluzione è semplice: basta aggiungere un listener per il IOErrorEvent.IO_ERROR
evento al tuo caricatore / i. Anche se l'ascoltatore non fa nulla, sopprimerà almeno l'errore 2044, in virtù del semplice fatto di esistere.
var loader: URLLoader = new URLLoader; loader.load (new URLRequest ("some-non-existant.url")); loader.addEventListener (IOErrorEvent.IO_ERROR, onError); function onError (e: IOErrorEvent): void // Do nothing
Ricorda che aggiungi eventi al contentLoaderInfo
proprietà di caricatore
oggetti, non al caricatore
direttamente:
var loader: Loader = new Loader (); loader.load (new URLRequest ("some-non-existant.url")); loader.contentLoaderInfo.addEventListener (IOErrorEvent.IO_ERROR, onError); function onError (e: IOErrorEvent): void // Do nothing
Tuttavia, dovresti essere preparato meglio di questo, come un boy scout; si determinerebbe idealmente quale sarebbe l'azione appropriata da intraprendere, quindi si avvierà quell'azione nella funzione di gestore eventi. Potresti decidere di caricare un'immagine? Non trovata? immagine o un file XML predefinito. Potresti presentare un avviso all'utente che notifica che non è stato possibile caricare una risorsa richiesta, e riprovare più tardi. Forse disabiliti anche parti del tuo SWF perché non è stato possibile caricare i dati richiesti. Potresti persino inviare un messaggio a un registro sul lato server con i dettagli, in modo da poter esaminare la situazione.
Come ho già detto, questo è abbastanza facile, davvero. È solo questione di abituarsi ad aggiungere quel gestore di eventi in primo luogo, in modo che non si veda più l'errore 2044. Non impedirà il caricamento delle risorse in caso di malfunzionamento, ma può farti degradare con garbo e recuperare l'errore nel miglior modo possibile.
Grazie per aver letto. Ci rivedremo presto in un altro Suggerimento rapido di Debug.