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