Cuando trabaje con errores en tiempo de ejecución sincrónicos, utilice sentencias
try..catch..finally
para capturar errores. Si se produce un error de tiempo de ejecución, el motor de ejecución de Flash genera una excepción, lo que significa que se suspende la ejecución normal y se crea un objeto especial de tipo Error. El objeto Error se genera en el primer bloque
catch
disponible.
La sentencia
try
incluye sentencias que podrían provocar errores. La sentencia
catch
siempre se debe utilizar con una sentencia
try
. Si se detecta un error en una de las sentencias del bloque
try
, se ejecutarán las sentencias
catch
asociadas a la sentencia
try
.
La sentencia
finally
incluye sentencias que se ejecutarán independientemente de que se produzcan errores en el bloque
try
. Si no hay errores, las sentencias del bloque
finally
se ejecutarán una vez que hayan finalizado las sentencias del bloque
try
. Si se producen errores, primero se ejecutará la sentencia
catch
correspondiente, seguida de las instancias del bloque
finally
.
El código siguiente muestra la sintaxis necesaria para usar las sentencias
try..catch..finally
:
try
{
// some code that could throw an error
}
catch (err:Error)
{
// code to react to the error
}
finally
{
// Code that runs whether an error was thrown. This code can clean
// up after the error, or take steps to keep the application running.
}
Cada sentencia
catch
identifica el tipo de excepción específico que gestiona. La sentencia
catch
puede especificar solo clases de errores que son subclases de la clase Error. Cada sentencia
catch
se comprueba por orden. Solo se ejecutará la primera sentencia
catch
que coincida con el tipo de error generado. Dicho de otra forma, si primero se comprueba la clase Error de nivel superior y luego la subclase de la clase Error, únicamente coincidirá la clase Error de nivel superior. En el código siguiente se muestra este escenario:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
El código anterior muestra el resultado siguiente:
<Error> I am an ArgumentError
Para capturar correctamente la clase de error ArgumentError, es necesario asegurarse de que los tipos de error más específicos se enumeran primero, y que los más genéricos aparecen después, tal como se muestra en el código siguiente:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
Varios métodos y propiedades de la API de ActionScript generan errores en tiempo de ejecución si detectan errores durante la ejecución. Por ejemplo, el método
close()
de la clase Sound genera un error IOError si no puede cerrar el flujo de audio, tal como se muestra en el código siguiente:
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
A medida que el usuario se familiarice con
Referencia de ActionScript 3.0 para la plataforma de Adobe Flash
, reconocerá los métodos que generan excepciones, tal y como se indica en la descripción de cada método.