Risposte a eventi errore e a errori basati sullo statoFlash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive Uno dei miglioramenti più evidenti apportati alla funzionalità di gestione degli errori in ActionScript 3.0 è rappresentato dal supporto della gestione degli errori asincroni quando un'applicazione è in esecuzione. Per una definizione di errori asincroni, vedete Tipi di errore. Per rispondere agli eventi errore si possono creare listener e gestori di eventi. Molte classi inviano gli eventi errore esattamente come qualsiasi altro tipo di evento. Ad esempio, un'istanza della classe XMLSocket generalmente invia tre tipi di eventi: Event.CLOSE, Event.CONNECT e DataEvent.DATA. Tuttavia, quando si verifica un problema, la classe XMLSocket può inviare l'errore IOErrorEvent.IOError o l'errore SecurityErrorEvent.SECURITY_ERROR. Per ulteriori informazioni sui listener e gestori di eventi, vedete Gestione degli eventi. Gli eventi errore appartengono a due categorie:
Operazioni con gli eventi erroreLa classe ErrorEvent e le relative sottoclassi contengono tipi di errore che i runtime Flash inviano mentre tentano di leggere o scrivere dati. L'esempio seguente utilizza un'istruzione try..catch e gestori errore per visualizzare gli eventuali errori rilevati quando si cerca di leggere un file locale. Per presentare agli utenti più opzioni, è possibile creare codice di gestione più sofisticato oppure gestire l'errore automaticamente nei punti indicati dal commento “inserite qui il codice di gestione degli errori”: 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
}
}
}
Operazioni con gli eventi di variazione dello statoI runtime Flash variano in modo dinamico il valore della proprietà netStatus.info.level o della proprietà status.level per le classi che supportano la proprietà level quando un'applicazione è in esecuzione. Le classi dotate della proprietà netStatus.info.level sono NetConnection, NetStream e SharedObject. Le classi dotate della proprietà status.level sono HTTPStatusEvent, Camera, Microphone e LocalConnection. Tramite una funzione gestore si può rispondere alla modifica del valore level e tenere traccia degli errori di comunicazione. L'esempio seguente illustra l'utilizzo di una funzione netStatusHandler() per verificare il valore della proprietà level. Se la proprietà level indica che si è verificato un errore, il codice produce il messaggio “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);
}
}
}
|
|