Documentación de Flash CS3 |
|||
| Programación con ActionScript 3.0 > Gestión de errores > 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:
La clase flash.events.ErrorEvent contiene las propiedades y los métodos para gestionar los errores en tiempo de ejecución de Flash Player relativos a las operaciones de red y comunicaciones. Las clases AsyncErrorEvent, IOErrorEvent y SecurityErrorEvent amplían la clase ErrorEvent. Si se usa la versión de depuración de Flash Player, un cuadro de diálogo indicará en tiempo de ejecución los eventos de error que encuentre el reproductor sin las funciones de detector.
Los eventos de error basados en estado hacen referencia a las propiedades netStatus y status de las clases de red y comunicaciones. Si Flash Player detecta un problema al leer o escribir datos, el valor de las propiedades netStatus.info.level o status.level (según el objeto de clase que se utilice) se establece en "error". A este error se responde comprobando si la propiedad level contiene el valor "error" en la función de controlador de eventos.
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í
}
}
}
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