Dans cette astuce, nous allons prendre l'erreur d'exécution 2044, l'erreur d'E / S non traitée. C'est en fait très simple, mais cela gêne même les développeurs expérimentés. Nous allons donc aller plus en profondeur et transformer tout le monde ici en ninjas avec erreurs IO..
Commençons par configurer un code dans un fichier Flash qui génère l'erreur 2044. Créez un nouveau fichier Flash AS3 et entrez ce code dans le panneau Script:
var loader: Loader = new Loader (); loader.load (new URLRequest ("some-non-existant.url"));
Allez-y et exécutez le SWF, et vous devriez voir cette erreur:
Erreur n ° 2044: IOErrorEvent non géré. text = Erreur # 2035: URL introuvable.
Vous verrez la même erreur, avec une légère variation si nous ne faisons que changer Chargeur
à URLLoader
, comme ci-dessous:
var loader: URLLoader = new URLLoader (); loader.load (new URLRequest ("some-non-existant.url"));
Vous devriez voir quelque chose comme ceci, uniquement avec le chemin du fichier reflétant votre environnement:
Erreur n ° 2044: ioError non gérée :. text = Erreur n ° 2032: Erreur de flux. URL: file: ////Volumes/Mac%20Pro/Users/dru/Library/Caches/TemporaryItems/non-existant.url sur Untitled_fla :: MainTimeline / frame1 ()
Comme vous pouvez peut-être en déduire que l’erreur 2044 apparaît avec Chargeur
et URLLoader
en cours d'utilisation, cette erreur a quelque chose à voir avec le chargement de fichiers externes.
En fait, l'erreur a quelque chose à voir avec le échec charger un fichier externe. Comme le suggère l'URL fictive dans mes extraits de code, le fichier que nous essayons de charger rencontre un problème quelconque. Il est fort probable que le fichier soit inaccessible; il peut s'agir simplement d'une URL mal orthographiée ou d'une URL créée de manière dynamique, entraînant un mauvais emplacement, ou du fait que le serveur ou le réseau est en panne pour le moment..
Cependant, l’erreur 2044 ne vous accuse pas de charger un fichier défectueux. Cela va arriver. Nous ne pouvons pas contrôler le réseau, donc une défaillance de charge est inévitable. L'erreur 2044 vous accuse de ne pas être préparé à cela quand cela se produit.
Tous les deux Chargeur
et URLLoader
sont des répartiteurs d’événements, comme vous devriez le savoir en travaillant avec eux. Vous devez utiliser le Event.COMPLETE
événement afin de savoir quand un chargement est prêt pour que vous puissiez le manipuler. Si vous lisez ceci, vous ne réaliserez peut-être pas que ces classes de chargement envoient également d’autres événements, notamment le IOErrorEvent.IO_ERROR
un événement.
Lorsqu'un Chargeur
ou URLLoader
rencontre un échec, tel que décrit à l'étape précédente, il enverra une IOErrorEvent.IO_ERROR
un événement. C'est un événement spécialisé pour des cas comme celui-ci. Il porte un texte
propriété qui décrit la nature de l'erreur, comme le montrent les erreurs que nous avons créées à la première étape; l'erreur 2044 a été générée par les deux extraits de code, mais le texte de chacun était différent (même s'il était sémantiquement identique).
Contrairement à la plupart des événements, cependant, quand IOErrorEvent
s sont envoyés, le répartiteur vérifie l’existence d’au moins un écouteur d’événements. S'il n'en trouve pas, l'erreur IO non traitée est renvoyée..
La solution est donc simple: il suffit d’ajouter un écouteur pour le IOErrorEvent.IO_ERROR
événement à votre chargeur (s). Même si l'auditeur ne fait rien, il supprimera au moins l'Erreur 2044, du fait qu'il existe déjà.
var loader: URLLoader = new URLLoader; loader.load (new URLRequest ("some-non-existant.url")); loader.addEventListener (IOErrorEvent.IO_ERROR, onError); function onError (e: IOErrorEvent): void // Ne rien faire
Rappelez-vous que vous ajoutez des événements à la contentLoaderInfo
propriété de Chargeur
objets, pas à la Chargeur
directement:
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 // Ne rien faire
Cependant, vous devriez être mieux préparé que cela, comme un éclaireur; vous devriez idéalement déterminer quelle action appropriée entreprendre, puis lancer cette action dans la fonction de gestionnaire d'événements. Vous pourriez décider de charger une? Image non trouvée? image ou un fichier XML par défaut à la place. Vous pouvez présenter une alerte à l'utilisateur lui indiquant qu'une ressource requise n'a pas pu être chargée et que vous devez réessayer ultérieurement. Peut-être aussi désactivez-vous des parties de votre fichier SWF car les données requises ne pourraient pas être chargées. Vous pouvez même envoyer un message à un journal côté serveur avec des détails, afin que vous puissiez examiner la situation.
Comme je l'ai mentionné, celui-ci est assez facile, vraiment. Il suffit simplement d’avoir l’habitude d’ajouter ce gestionnaire d’événements pour ne plus jamais voir l’Erreur 2044. Cela n'empêchera pas le chargement des ressources d'échouer, mais cela peut vous permettre de vous dégrader gracieusement et de vous rétablir du mieux possible..
Merci d'avoir lu. Je vous reverrai bientôt dans un autre conseil rapide de débogage.