Respuesta al estado y a los eventos de error

Una de las mejoras más evidentes en la gestión de errores de ActionScript 3.0 es la compatibilidad con la gestión de eventos de error, que permite responder a errores asincrónicos en tiempo de ejecución. Para ver una definición de los errores asincrónicos, consulte Tipos de errores.

Se pueden crear detectores y controladores de eventos para responder a los eventos de error. Muchas clases distribuyen eventos de error igual que otros eventos. Por ejemplo, una instancia de la clase XMLSocket suele distribuir tres tipos de evento: Event.CLOSE, Event.CONNECT y DataEvent.DATA. No obstante, cuando se produce un problema, la clase XMLSocket puede distribuir los errores IOErrorEvent.IOError o SecurityErrorEvent.SECURITY_ERROR. Para más información sobre detectores y controladores de eventos, consulte Gestión de eventos.

Los eventos de error se enmarcan en una de estas dos categorías:

Subtemas

Utilización de eventos de error
Utilización de eventos de cambio de estado

Utilización de eventos de error

La clase ErrorEvent y sus subclases contienen tipos de error para gestionar errores distribuidos por Flash Player cuando intenta leer o escribir datos.

En el siguiente ejemplo se usa una sentencia try..catch y controladores de evento de error para mostrar los errores detectados al intentar leer un archivo local. Se puede añadir código de gestión más avanzado a fin de proporcionar opciones a los usuarios o bien gestionar el error automáticamente en los lugares indicados con el comentario "escribir código de gestión de errores aquí":

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);
                // escribir código de gestión de errores aquí
            }
            myMP3.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
        }

        private function linkHandler(linkEvent:TextEvent):void
        {
            playMP3(linkEvent.text);
            // escribir código de gestión de errores aquí
        }
        
        private function errorHandler(errorEvent:IOErrorEvent):void
        {
            trace(errorEvent.text);
            // escribir código de gestión de errores aquí
        }
    }
}

Utilización de eventos de cambio de estado

Flash Player cambia dinámicamente el valor de las propiedades netStatus.info.level o status.level para las clases que admiten la propiedad level. Las clases que tienen la propiedad netStatus.info.level son NetConnection, NetStream y SharedObject. Las clases que tienen la propiedad status.level son HTTPStatusEvent, Camera, Microphone y LocalConnection. Se puede escribir una función de controlador para responder al cambio del valor level y hacer un seguimiento de los errores de comunicación.

En el siguiente ejemplo se usa una función netStatusHandler() para probar el valor de la propiedad level. Si la propiedad level indica que se ha detectado un error, el código realiza un seguimiento del mensaje "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("")
            }
            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

 

Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios

Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000104.html