En este Consejo rápido, asumiremos el Error 2044 en tiempo de ejecución, el error de E / S no manejado. En realidad es muy simple, pero afecta incluso a desarrolladores experimentados, así que profundizaremos y convertiremos a todos aquí en ninjas de error IO.
Comencemos configurando un código en un archivo Flash que produce el error 2044. Cree un nuevo archivo AS3 Flash e ingrese este código en el panel Script:
var loader: Loader = new Loader (); loader.load (nueva URLRequest ("some-non-existant.url"));
Continúe y ejecute el SWF, y debería ver este error:
Error # 2044: IOErrorEvent no manejado :. texto = Error # 2035: URL no encontrada.
Verá el mismo error, con una ligera variación si cambiamos Cargador
a URLLoader
, como en el siguiente:
var loader: URLLoader = new URLLoader (); loader.load (nueva URLRequest ("some-non-existant.url"));
Debería ver algo como esto, solo con la ruta del archivo que refleja su entorno:
Error # 2044: error no manejado :. texto = Error # 2032: Error de flujo. URL: file: ////Volumes/Mac%20Pro/Users/dru/Library/Caches/TemporaryItems/non-existant.url en Untitled_fla :: MainTimeline / frame1 ()
Como puede suponer por el hecho de que el Error 2044 surge de Cargador
y URLLoader
En uso, este error tiene algo que ver con la carga de archivos externos..
De hecho, el error tiene algo que ver con el fracaso para cargar un archivo externo. Como sugeriría la URL falsa en mis fragmentos de código, el archivo que estamos intentando cargar está teniendo algún tipo de problema. Lo más probable es que se trate de un archivo inalcanzable; esto podría ser simplemente una URL mal deletreada, o una URL que se está creando de forma dinámica y que se traduce en una ubicación incorrecta, o porque el servidor o la red están inactivos en este momento.
Sin embargo, el error 2044 no le está acusando de cargar un archivo incorrecto. Eso va a pasar. No podemos controlar la red, por lo que es probable que ocurra una falla de carga en algún momento. El error 2044 lo acusa de no estar preparado para cuando eso suceda.
Ambos Cargador
y URLLoader
son despachadores de eventos, como debe saber al trabajar con ellos. Necesitas utilizar el Evento.COMPLETO
evento para saber cuándo una carga está lista para que usted trabaje con ella. Sin embargo, si está leyendo esto, es posible que no se dé cuenta de que estas clases de carga también distribuyen otros eventos, en particular el IOErrorEvent.IO_ERROR
evento.
Cuando un Cargador
o URLLoader
encuentra una falla, tal como se describe en el paso anterior, enviará una IOErrorEvent.IO_ERROR
evento. Este es un evento especializado para casos como este. Lleva un texto
propiedad que describe la naturaleza del error, como se ve en los errores que creamos en el primer paso; ambos fragmentos de código produjeron el Error 2044, pero el texto de cada uno era diferente (aunque era semánticamente el mismo).
A diferencia de la mayoría de los eventos, sin embargo, cuando IOErrorEvent
Cuando se despachan, el despachador verifica la existencia de al menos un detector de eventos. Si no encuentra ninguno, arroja el error de E / S no manejado..
Así que la solución es simple: simplemente agregue un oyente para el IOErrorEvent.IO_ERROR
evento a su cargador (s). Incluso si el oyente no hace nada, al menos suprimirá el Error 2044, en virtud de la mera existencia.
var loader: URLLoader = new URLLoader; loader.load (nueva URLRequest ("some-non-existant.url")); loader.addEventListener (IOErrorEvent.IO_ERROR, onError); función onError (e: IOErrorEvent): void // No hacer nada
Recuerda que agregas eventos a la contentLoaderInfo
propiedad de Cargador
objetos, no a la Cargador
directamente:
var loader: Loader = new Loader (); loader.load (nueva URLRequest ("some-non-existant.url")); loader.contentLoaderInfo.addEventListener (IOErrorEvent.IO_ERROR, onError); función onError (e: IOErrorEvent): void // No hacer nada
Sin embargo, debes estar mejor preparado que esto, como un boy scout; lo ideal sería determinar cuál sería la acción apropiada a tomar, y luego iniciar esa acción en la función del controlador de eventos. Usted podría decidir cargar una? Imagen no encontrada? imagen o un archivo XML predeterminado en su lugar. Puede presentar una alerta al usuario notificándoles que no se pudo cargar un recurso requerido, y debería intentarlo más tarde. Quizás también deshabilite partes de su SWF porque no se pudieron cargar los datos requeridos. Incluso puede lanzar un mensaje a un registro del lado del servidor con detalles, para que pueda ver la situación.
Como mencioné, este es bastante fácil, de verdad. Es solo una cuestión de adquirir el hábito de agregar ese controlador de eventos en primer lugar, para que nunca vuelva a ver el Error 2044. No evitará que la carga de recursos falle, pero puede permitirle degradarse con gracia y recuperarse de la falla lo mejor que pueda..
Gracias por leer. Te veré de nuevo en breve en otro Consejo rápido de depuración.