Documentazione di Flash CS3 |
|||
| Programmazione in ActionScript 3.0 > Gestione degli errori > Risposte a eventi errore e a errori basati sullo stato | |||
Uno dei miglioramenti più evidenti apportati alla funzionalità di gestione degli errori in ActionScript 3.0 è rappresentato dal supporto della gestione degli errori asincroni della fase di runtime. (Per una definizione di errore asincrono, vedere 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, vedere Gestione degli eventi.
Gli eventi errore appartengono a due categorie:
La classe flash.events.ErrorEvent contiene le proprietà e i metodi per la gestione degli errori runtime di Flash Player relativi alle attività di rete e di comunicazione. Le classi AsyncErrorEvent, IOErrorEvent e SecurityErrorEvent sono evoluzioni della classe ErrorEvent. Quando si utilizza la versione debugger di Flash Player, una finestra di dialogo comunica, in fase di runtime, gli eventi errore senza funzione di listener che il programma incontra.
Gli eventi errore basati sullo stato sono correlati alle proprietà netStatus e status delle classi di rete e comunicazione. Se Flash Player incontra un problema durante la lettura o scrittura dei dati, il valore della proprietà netStatus.info.level o status.level (a seconda della classe utilizzata) viene impostato su "error". Si risponde a questo errore verificando se la proprietà level contiene il valore "error" nella funzione gestore di eventi.
La classe ErrorEvent e le relative sottoclassi contengono tipi di errore che Flash Player invia mentre tenta di leggere o scrivere dati.
L'esempio seguente illustra l'uso di un'istruzione try..catch e di gestori di eventi errore per visualizzare eventuali errori rilevati durante la lettura di 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 "inserire 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;
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);
// inserire qui il codice di gestione degli errori
}
myMP3.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
private function linkHandler(linkEvent:TextEvent):void
{
playMP3(linkEvent.text);
// inserire qui il codice di gestione degli errori
}
private function errorHandler(errorEvent:IOErrorEvent):void
{
trace(errorEvent.text);
// inserire qui il codice di gestione degli errori
}
}
}
Flash Player varia in modo dinamico il valore della proprietà netStatus.info.level o della proprietà status.level delle classi che supportano la proprietà level. 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);
}
}
}
Flash CS3
Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti
Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000104.html