Tipos de errores

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Al desarrollar y ejecutar aplicaciones, se detectan diferentes tipos de errores, con su correspondiente terminología. En la tabla siguiente se presentan los principales tipos de errores y sus términos relacionados:

  • El compilador de ActionScript captura los errores en tiempo de compilación durante la compilación del código. Estos errores se producen cuando los problemas sintácticos del código impiden crear la aplicación.

  • Los errores en tiempo de ejecución se producen al ejecutar la aplicación tras compilarla. Los errores en tiempo de ejecución representan errores causados mientras un archivo SWF se reproduce en el motor de ejecución de Flash (como Adobe Flash Player o Adobe AIR). En la mayoría de los casos, es posible gestionar los errores en tiempo de ejecución conforme suceden, informando sobre ellos al usuario y adoptando medidas para que la aplicación se siga ejecutando. Si el error es grave (por ejemplo, no se puede establecer una conexión con un sitio web remoto o cargar los datos requeridos), se puede recurrir a la gestión de errores para que la aplicación finalice sin problemas.

  • Los errores sincrónicos son errores en tiempo de ejecución que se producen cuando se llama una función. Por ejemplo, si se intenta utilizar un método específico y el método que se transmite al argumento no es válido, por lo que el motor de ejecución de Flash genera una excepción. La mayor parte de los errores se producen de forma sincrónica (cuando se ejecuta la sentencia) y el flujo del control se pasa inmediatamente a la sentencia catch más apropiada.

    Por ejemplo, el fragmento de código siguiente genera un error en tiempo de ejecución porque no se llama al método browse() antes de que el programa intente cargar un archivo:

    var fileRef:FileReference = new FileReference(); 
    try 
    { 
        fileRef.upload(new URLRequest("http://www.yourdomain.com/fileupload.cfm")); 
    } 
    catch (error:IllegalOperationError) 
    { 
        trace(error); 
        // Error #2037: Functions called in incorrect sequence, or earlier 
        // call was unsuccessful. 
    }

    En este caso, un error en tiempo de ejecución se genera sincrónicamente, ya que Flash Player determinó que el método browse() no se llamó antes de intentar cargar el archivo.

    Para obtener información detallada sobre la gestión de errores sincrónicos, consulte Gestión de errores sincrónicos en una aplicación .

  • Los errores asincrónicos son errores en tiempo de ejecución que se producen fuera del flujo normal del programa. Generan eventos y los detectores de eventos los capturan. En las operaciones asincrónicas, una función inicia una operación, pero no espera a que se complete. Se puede crear un detector de eventos de error para esperar a que la aplicación o el usuario realicen alguna operación; si esta falla, el error se captura con un detector de eventos y se responde al evento de error. A continuación, el detector de eventos llama a una función de controlador de eventos para responder al evento de error de una manera útil. Por ejemplo, el controlador de eventos puede iniciar un cuadro de diálogo que solicite al usuario que resuelva el error.

    Considérese el ejemplo de error sincrónico relativo a la carga de archivo presentado anteriormente. Si se llama correctamente al método browse() antes de iniciar una carga de archivo, Flash Player distribuirá varios eventos. Por ejemplo, cuando se inicia una carga, se distribuye el evento open . Si la operación de carga de archivo finaliza correctamente, se distribuye el evento complete. Puesto que la gestión de eventos es asincrónica (es decir, que no se produce en momentos específicos, conocidos y designados previamente), hay que utilizar el método addEventListener() para detectar estos eventos específicos, tal como se muestra en el código siguiente:

    var fileRef:FileReference = new FileReference(); 
    fileRef.addEventListener(Event.SELECT, selectHandler); 
    fileRef.addEventListener(Event.OPEN, openHandler); 
    fileRef.addEventListener(Event.COMPLETE, completeHandler); 
    fileRef.browse(); 
     
    function selectHandler(event:Event):void 
    { 
        trace("...select..."); 
        var request:URLRequest = new URLRequest("http://www.yourdomain.com/fileupload.cfm"); 
        request.method = URLRequestMethod.POST; 
        event.target.upload(request); 
    } 
    function openHandler(event:Event):void 
    { 
        trace("...open..."); 
    } 
    function completeHandler(event:Event):void 
    { 
        trace("...complete..."); 
    }

    Para obtener información detallada sobre la gestión de errores asincrónicos, consulte Respuesta al estado y a los eventos de error .

  • Las excepciones no capturadas son errores generados sin una lógica (como una sentencia catch ) que pueda responder a ellos. Si la aplicación genera un error y no se encuentran controladores de eventos o sentencias catch en el nivel actual o superior para gestionar el error, este se considera una excepción no capturada.

    Cuando se produce un error no capturado, el motor de ejecución distribuye un evento uncaughtError . Este evento también se denomina “controlador de error global”. Este evento se distribuye mediante el objeto UncaughtErrorEvents del archivo SWF, que está disponible a través de la propiedad LoaderInfo.uncaughtErrorEvents . Si no hay detectores registrados para el evento uncaughtError , el motor de ejecución omite los errores no capturados e intenta continuar ejecutándose, siempre que el error no detenga el archivo SWF.

    Además de distribuir el evento uncaughtError , las versiones de depuración del motor de ejecución de Flash responden a errores no capturados terminando el script actual. Posteriormente, muestran el error no capturado en la salida de la sentencia trace , o bien, mediante la especificación del mensaje de error en un archivo de registro. Si el objeto de excepción es una instancia de la clase Error o una de sus subclases, la información de seguimiento de pila también se visualizará en la salida. Para obtener más información sobre el uso de la versión de depuración de los motores de ejecución de Flash, consulte Trabajo con las versiones de depuración de los motores de ejecución de Flash .

    Nota: durante el procesamiento de un evento uncaughtError, si se emite un evento error desde un controlador uncaughtError, el controlador de eventos se llama varias veces. Esto tiene como resultado un bucle infinito de excepciones. Se recomienda evitar este escenario.