Risposte a eventi errore e a errori basati sullo stato

Uno dei miglioramenti più evidenti apportati alla funzionalità di gestione degli errori in ActionScript 3.0 è rappresentato dal supporto della gestione degli errori asincroni della fase di runtime. (Per una definizione di errore asincrono, vedere Tipi di errore.)

Per rispondere agli eventi errore si possono creare listener e gestori di eventi. Molte classi inviano gli eventi errore esattamente come qualsiasi altro tipo di evento. Ad esempio, un'istanza della classe XMLSocket generalmente invia tre tipi di eventi: Event.CLOSE, Event.CONNECT e DataEvent.DATA. Tuttavia, quando si verifica un problema, la classe XMLSocket può inviare l'errore IOErrorEvent.IOError o l'errore SecurityErrorEvent.SECURITY_ERROR. Per ulteriori informazioni sui listener e gestori di eventi, vedere Gestione degli eventi.

Gli eventi errore appartengono a due categorie:

Sezioni

Operazioni con gli eventi errore
Operazioni con gli eventi di variazione dello stato

Operazioni con gli eventi errore

La classe ErrorEvent e le relative sottoclassi contengono tipi di errore che Flash Player invia mentre tenta di leggere o scrivere dati.

L'esempio seguente illustra l'uso di un'istruzione try..catch e di gestori di eventi errore per visualizzare eventuali errori rilevati durante la lettura di un file locale. Per presentare agli utenti più opzioni, è possibile creare codice di gestione più sofisticato oppure gestire l'errore automaticamente nei punti indicati dal commento "inserire qui il codice di gestione degli errori":

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);
                // inserire qui il codice di gestione degli errori
            }
            myMP3.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
        }

        private function linkHandler(linkEvent:TextEvent):void
        {
            playMP3(linkEvent.text);
            // inserire qui il codice di gestione degli errori
        }
        
        private function errorHandler(errorEvent:IOErrorEvent):void
        {
            trace(errorEvent.text);
            // inserire qui il codice di gestione degli errori
        }
    }
}

Operazioni con gli eventi di variazione dello stato

Flash Player varia in modo dinamico il valore della proprietà netStatus.info.level o della proprietà status.level delle classi che supportano la proprietà level. Le classi dotate della proprietà netStatus.info.level sono NetConnection, NetStream e SharedObject. Le classi dotate della proprietà status.level sono HTTPStatusEvent, Camera, Microphone e LocalConnection. Tramite una funzione gestore si può rispondere alla modifica del valore level e tenere traccia degli errori di comunicazione.

L'esempio seguente illustra l'utilizzo di una funzione netStatusHandler() per verificare il valore della proprietà level. Se la proprietà level indica che si è verificato un errore, il codice produce il messaggio "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

 

Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti

Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000104.html