Resposta a eventos e status de erros

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

Um dos aprimoramentos mais notáveis da manipulação de erros no ActionScript 3.0 é o suporte à manipulação de eventos de erro para responder a erros assíncronos enquanto um aplicativo está em execução. (Para obter uma definição de erros assíncronos, consulte Tipos de erros .)

Você pode criar ouvintes e manipuladores de eventos para responder aos eventos de erro. Muitas classes despacham os eventos de erro da mesma forma o fazem com outros eventos. Por exemplo, uma instância da classe XMLSocket normalmente despacha três tipos de eventos: Event.CLOSE , Event.CONNECT e DataEvent.DATA . Entretanto, quando ocorre um problema, a classe XMLSocket pode despachar o IOErrorEvent.IOError ou o SecurityErrorEvent.SECURITY_ERROR . Para obter mais informações sobre ouvintes e manipuladores de eventos, consulte Manipulação de eventos .

Os eventos de erro se enquadram em duas categorias:

  • Eventos de erro que estendem a classe ErrorEvent

    A classe flash.events.ErrorEvent contém as propriedades e os métodos para gerenciar erros relacionados às operações de rede e comunicação em um aplicativo em tempo de execução. As classes AsyncErrorEvent, IOErrorEvent e SecurityErrorEvent estendem a classe ErrorEvent. Se você estiver usando a versão de depurador de um tempo de execução do Flash, uma caixa de diálogo o informará, em tempo de execução, sobre qualquer evento de erro sem as funções de ouvinte que o player encontrar.

  • Eventos de erro baseados no status

    Os eventos de erro baseados no status estão relacionados às propriedades netStatus e status das classes de rede e comunicação. Se o tempo de execução do Flash encontrar um problema ao ler ou gravar dados, o valor das propriedades netStatus.info.level ou status.level (dependendo do objeto de classe usado) será definido com o valor "error" . A resposta a esse erro é verificar se a propriedade level contém o valor "error" na função do manipulador de eventos.

Trabalho com eventos de erro

A classe ErrorEvent e suas subclasses contêm tipos de erro para manipular erros despachados pelos tempos de execução do Flash quando tentam ler ou gravar dados.

O exemplo a seguir usa uma instrução try..catch e manipuladores de evento de erro para exibir os erros detectados ao tentar ler um arquivo local. Você pode adicionar código de manipulação mais sofisticado para fornecer opções a um usuário ou manipular o erro automaticamente nos locais indicados pelo comentário "seu código de manipulação de erros aqui":

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 
        } 
    } 
}

Trabalho com eventos de alteração de status

Os tempos de execução do Flash alteram dinamicamente o valor das propriedades netStatus.info.level ou status.level para as classes que suportam a propriedade level enquanto uma aplicativo está em execução. As classes que possuem a propriedade netStatus.info.level são: NetConnection, NetStream e SharedObject. As classes que possuem a propriedade status.level são: HTTPStatusEvent, Camera, Microphone e LocalConnection. Você pode escrever uma função de manipulador para responder à alteração no valor level e controlar os erros de comunicação.

O exemplo a seguir usa uma função netStatusHandler() para testar o valor da propriedade level . Se a propriedade level indicar que um erro foi encontrado, o código rastreia a mensagem “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); 
        } 
    } 
}