Resposta a eventos e status de errosFlash 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, consulteManipulação de eventos. Os eventos de erro se enquadram em duas categorias:
Trabalho com eventos de erroA 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 statusOs 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 “Falha no fluxo de vídeo”. 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); } } } |
![]() |