Réponse à des événements d'erreurs et au statut

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 d'exécution asynchrones. (Voir Types d'erreurs pour consulter la définition des erreurs asynchrones.)

Vous pouvez créer des écouteurs d'événements 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 instance de la classe XMLSocket distribue normalement trois types d'événements : Event.CLOSE, Event.CONNECT, et DataEvent.DATA. Néanmoins, lorsqu'un problème a lieu, la classe XMLSocket peut distribuer IOErrorEvent.IOError ou SecurityErrorEvent.SECURITY_ERROR. Pour de plus amples informations sur les écouteurs d'événements et les gestionnaires d'événements, voir Gestion d'événements.

Les événements d'erreurs peuvent être classés en deux catégories :

Sous-rubriques

Utilisation d'événements d'erreurs
Utilisation d'événements de changement de statut

Utilisation d'événements d'erreurs

La classe ErrorEvent et ses sous-classes contiennent des types d'erreurs pour gérer les erreurs distribuées par Flash Player lors de la lecture ou de l'écriture des données.

L'exemple suivant utilise une instruction try..catch et des gestionnaires d'événements pour afficher les erreurs détectées lors de la tentative de lecture d'un fichier local. Vous pouvez ajouter un code de gestion plus élaboré pour permettre à l'utilisateur de gérer l'erreur automatiquement aux endroits indiqués par le commentaire « entrez votre code ici » :

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;

    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);
                // entrez votre code ici
            }
            myMP3.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
        }

        private function linkHandler(linkEvent:TextEvent):void
        {
            playMP3(linkEvent.text);
            // entrez votre code ici
        }
        
        private function errorHandler(errorEvent:IOErrorEvent):void
        {
            trace(errorEvent.text);
            // entrez votre code ici
        }
    }
}

Utilisation d'événements de changement de statut

Flash Player change dynamiquement la valeur des propriétés netStatus.info.level ou status.level pour les classes qui prennent en charge la propriété level. 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);
        }
    }
}

Flash CS3

 

M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire

Page en cours: http://livedocs.adobe.com/flash/9.0_fr/main/00000104.html