Flash 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:
-
Eventi errore che ampliano la classe ErrorEvent
La classe flash.events.ErrorEvent contiene le proprietà e i metodi per la gestione degli errori relativi alle attività di rete e di comunicazione in un'applicazione in esecuzione. Le classi AsyncErrorEvent, IOErrorEvent e SecurityErrorEvent sono evoluzioni della classe ErrorEvent. Quando utilizzate la versione debugger di un runtime Flash, una finestra di dialogo comunica, in fase di runtime, gli eventi errore senza funzione di listener che il programma incontra.
-
Eventi errore basati sullo stato
Gli eventi errore basati sullo stato sono correlati alle proprietà
netStatus
e
status
delle classi di rete e comunicazione. Se un runtime Flash 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.
Operazioni con gli eventi errore
La 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 stato
I 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);
}
}
}
|
|
|