Durante o trabalho com erros de tempo de execução síncronos, use as instruções
try..catch..finally
para detectar erros. Quando ocorre um erro de tempo de execução, o tempo de execução do Flash lança uma exceção, o que significa que ele suspende a execução normal e cria um objeto especial do tipo Error. O objeto Error é lançado para o primeiro bloco
catch
disponível.
A instrução
try
delimita instruções com potencial para criar erros. A instrução
catch
é sempre usada com uma instrução
try
. Se for detectado um erro em uma das instruções no bloco
try
, as instruções
catch
anexadas a
try
serão executadas.
A instrução
finally
delimitará as instruções que serão executadas caso ocorra ou não um erro no bloco
try
. Se não houver nenhum erro, as instruções no bloco
finally
serão executadas depois que as instruções do bloco
try
forem concluídas. Se houver um erro, a instrução
catch
apropriada será executada primeiro, seguida pelas instruções no bloco
finally
.
O código a seguir demonstra a sintaxe para usar as instruções
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 instrução
catch
identifica um tipo específico de exceção que ela manipula. A instrução
catch
pode especificar apenas as classes de erro que forem subclasses da classe Error. Cada instrução
catch
é verificada por ordem. Somente a primeira instrução
catch
que corresponder ao tipo de erro gerado será executada. Em outras palavras, se você verificar primeiro a classe Error de alto nível e depois uma subclasse dela, somente a classe Error de alto nível será correspondente. O seguinte código ilustra essa questão:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
O código anterior exibe a seguinte saída:
<Error> I am an ArgumentError
Para detectar corretamente o ArgumentError, os tipos de erro mais específicos devem ser listados primeiro e os mais genéricos por último, como mostra o seguinte código:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
Vários métodos e propriedades na API do ActionScript lançam erros de tempo de execução quando encontram erros ao serem executados. Por exemplo, o método
close()
na classe Sound lançará um IOError se o método não conseguir fechar o fluxo de áudio, conforme demonstrado no seguinte código:
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
À medida que você se familiariza com a
Referência do ActionScript® 3.0 para Adobe® Flash® Platform
, irá perceber quais métodos geram exceções, como detalhado na descrição de cada método.