Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures
L’une des améliorations majeures apportées à la gestion des erreurs dans ActionScript 3.0 est la prise en charge de la gestion des événements d’erreur pour répondre à des erreurs asynchrones lors de l’exécution d’une application. (Pour obtenir une définition des erreurs asynchrones, voir
Types d’erreurs
).
Vous pouvez créer des écouteurs d’événement et des gestionnaires d’événements pour répondre aux événements d’erreurs. De nombreuses classes distribuent des événements d’erreurs de la même façon que d’autres événements. Par exemple, une occurrence de la classe XMLSocket distribue normalement trois types d’événements :
Event.CLOSE
,
Event.CONNECT
et
DataEvent.DATA
. Néanmoins, lorsqu’un problème se produit, la classe XMLSocket peut distribuer
IOErrorEvent.IOError
ou
SecurityErrorEvent.SECURITY_ERROR
. Pour plus d’informations sur les écouteurs et les gestionnaires d’événement, voir
Gestion des événements
.
Les événements d’erreurs peuvent être classés en deux catégories :
-
Evénements d’erreurs qui étendent la classe ErrorEvent
La classe flash.events.ErrorEvent contient les propriétés et les méthodes permettant de gérer les erreurs d’exécution liées à des opérations de réseau et de communication dans une application en cours d’exécution. Les classes AsyncErrorEvent, IOErrorEvent et SecurityErrorEvent étendent la classe ErrorEvent. Si vous utilisez la version de débogage d’un moteur d’exécution de Flash, une boîte de dialogue vous informe, lors de l’exécution, de la présence d’événements d’erreurs sans fonctions d’écouteur rencontrés par le lecteur.
-
Evénements d’erreurs basés sur le statut
Les événements d’erreur basés sur le statut sont liés aux propriétés
netStatus
et
status
des classes de communication et de réseau. Si un moteur d’exécution Flash rencontre un problème lors de la lecture ou de l’écriture des données, la valeur des propriétés
netStatus.info.level
ou
status.level
(selon l’objet de classe que vous utilisez) est définie sur la valeur
"error"
. Vous répondez à cette erreur en vérifiant que la propriété
level
contient la valeur
"error"
dans votre fonction de gestionnaire d’événement.
Utilisation d’événements d’erreurs
La classe ErrorEvent et ses sous-classes contiennent des types d’erreurs destinés à gérer les erreurs distribuées par les moteurs d’exécution Flash lorsqu’ils tentent de lire ou d’écrire des données.
L’exemple suivant utilise à la fois une instruction
try..catch
et des gestionnaires d’événement d’erreur pour afficher toute erreur détectée lors de la tentative de lecture d’un fichier local. Vous pouvez ajouter un code de gestion plus élaboré pour proposer des options à l’utilisateur ou gérer l’erreur automatiquement aux endroits indiqués par le commentaire « your error-handling code here » :
package
{
import flash.display.Sprite;
import flash.errors.IOError;
import flash.events.IOErrorEvent;
import flash.events.TextEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class LinkEventExample extends Sprite
{
private var myMP3:Sound;
public function LinkEventExample()
{
myMP3 = new Sound();
var list:TextField = new TextField();
list.autoSize = TextFieldAutoSize.LEFT;
list.multiline = true;
list.htmlText = "<a href=\"event:track1.mp3\">Track 1</a><br>";
list.htmlText += "<a href=\"event:track2.mp3\">Track 2</a><br>";
addEventListener(TextEvent.LINK, linkHandler);
addChild(list);
}
private function playMP3(mp3:String):void
{
try
{
myMP3.load(new URLRequest(mp3));
myMP3.play();
}
catch (err:Error)
{
trace(err.message);
// your error-handling code here
}
myMP3.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
private function linkHandler(linkEvent:TextEvent):void
{
playMP3(linkEvent.text);
// your error-handling code here
}
private function errorHandler(errorEvent:IOErrorEvent):void
{
trace(errorEvent.text);
// your error-handling code here
}
}
}
Utilisation d’événements de changement de statut
Les moteurs d’exécution Flash changent dynamiquement la valeur des propriétés
netStatus.info.level
ou
status.level
pour les classes qui prennent en charge la propriété
level
pendant qu’une application s’exécute. Les classes qui ont la propriété
netStatus.info.level
sont NetConnection, NetStream et SharedObject. Les classes qui ont la propriété
status.level
sont HTTPStatusEvent, Camera, Microphone et LocalConnection. Vous pouvez écrire une fonction de gestionnaire pour répondre au changement de valeur
level
et suivre les erreurs de communication.
L’exemple suivant utilise une fonction
netStatusHandler()
pour tester la valeur de la propriété
level
. Si la propriété
level
indique qu’une erreur a été rencontrée, le code suit le message « Video stream failed ».
package
{
import flash.display.Sprite;
import flash.events.NetStatusEvent;
import flash.events.SecurityErrorEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
public class VideoExample extends Sprite
{
private var videoUrl:String = "Video.flv";
private var connection:NetConnection;
private var stream:NetStream;
public function VideoExample()
{
connection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
connection.connect(null);
}
private function netStatusHandler(event:NetStatusEvent):void
{
if (event.info.level == "error")
{
trace("Video stream failed")
}
else
{
connectStream();
}
}
private function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
}
private function connectStream():void
{
var stream:NetStream = new NetStream(connection);
var video:Video = new Video();
video.attachNetStream(stream);
stream.play(videoUrl);
addChild(video);
}
}
}
|
|
|