Lorsque vous manipulez des erreurs d’exécution synchrones, utilisez les instructions
try..catch..finally
pour intercepter les erreurs. Lorsqu’une erreur d’exécution se produit, le moteur d’exécution Flash renvoie une exception, ce qui signifie qu’il suspend l’exécution normale et crée un objet spécial de type Error. L’objet Error est ensuite renvoyé au premier bloc
catch
disponible.
L’instruction
try
regroupe les instructions pouvant créer des erreurs. Vous utilisez toujours l’instruction
catch
avec une instruction
try
. Si une erreur est détectée dans l’une des instructions du bloc
try
, les instructions
catch
associées à cette instruction
try
sont exécutées.
L’instruction
finally
regroupe les instructions exécutées, qu’une erreur se produise ou non dans le bloc
try
. S’il ne se produit pas d’erreur, les instructions du bloc
finally
sont exécutées au terme de l’exécution des instructions du bloc
try
. S’il se produit une erreur, l’instruction
catch
appropriée est exécutée en premier lieu, suivie des instructions du bloc
finally
.
Le code suivant illustre la syntaxe d’utilisation des instructions
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.
}
Chaque instruction
catch
identifie un type d’exception spécifique qu’elle gère. L’instruction
catch
peut spécifier uniquement des classes d’erreur qui sont des sous-classes de la classe Error. Chaque instruction
catch
est vérifiée dans l’ordre. Seule la première instruction
catch
qui correspond au type d’erreur renvoyé est exécutée. En d’autres termes, si vous vérifiez d’abord la classe Error de niveau supérieur, puis une sous-classe de la classe Error, seule la classe Error de niveau supérieur est prise en compte. Le code suivant illustre ce point :
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
Le code précédent affiche le résultat suivant :
<Error> I am an ArgumentError
Pour intercepter correctement l’erreur ArgumentError, assurez-vous que les types d’erreur les plus spécifiques sont répertoriés en premier, suivis des types d’erreur plus génériques, comme l’indique le code suivant :
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
Plusieurs méthodes et propriétés de l’API d’ActionScript renvoient des erreurs d’exécution si elles en rencontrent lors de leur exécution. Par exemple, la méthode
close()
de la classe Sound renvoie une erreur IOError si la méthode ne parvient pas à fermer le flux audio, comme indiqué dans le code suivant :
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
Au fur et à mesure que vous vous familiariserez avec le manuel
Guide de référence ActionScript 3.0 pour la plate-forme Adobe Flash
, vous identifierez les méthodes qui renvoient des exceptions, comme indiqué dans la description de chaque méthode.