Svara på felhändelser och status
Flash Player 9 och senare, Adobe AIR 1.0 och senare
En av de mest märkbara förbättringarna när det gäller felhantering i ActionScript 3.0 är stödet för felhändelsehantering för att svara på asynkrona fel som inträffar när ett program körs. (En definition av asynkrona fel finns i
Olika typer av fel
.)
Du kan skapa händelseavlyssnare och händelsehanterare för att besvara felhändelser. I många klasser skickas felhändelser på samma sätt som andra händelser. En instans av exempelvis klassen XMLSocket skickar normalt tre typer av händelser:
Event.CLOSE
,
Event.CONNECT
och
DataEvent.DATA
. Om emellertid ett problem inträffar kan klassen XMLSocket skicka
IOErrorEvent.IOError
eller
SecurityErrorEvent.SECURITY_ERROR
. Mer information om händelseavlyssnare och händelsehanterare finns i
Hantera händelser
.
Felhändelser passar in i en av dessa två kategorier:
-
Felhändelser som utökar klassen ErrorEvent
Klassen flash.events.ErrorEvent innehåller egenskaper och metoder för att hantera fel som rör nätverks- och kommunikationsåtgärder i ett program som körs. Klasserna AsyncErrorEvent, IOErrorEvent och SecurityErrorEvent utökar klassen ErrorEvent. Om du använder felsökningsversionen av en Flash-miljö öppnas en dialogruta under körningen som informerar dig om felhändelser, utan avlyssnarfunktioner, som identifieras av spelaren.
-
Statusbaserade felhändelser
Statusbaserade felhändelser är relaterade till egenskaperna
netStatus
och
status
i nätverks- och kommunikationsklasserna. Om en Flash-miljö stöter på ett problem när data läses eller skrivs anges värdet för egenskapen
netStatus.info.level
eller
status.level
(beroende på vilket klassobjekt du använder) till
error
. Du besvarar detta fel genom att kontrollera om egenskapen
level
innehåller värdet
"error"
i din händelsehanterarfunktion.
Arbeta med felhändelser
Klassen ErrorEvent och dess underklasser innehåller feltyper för hantering av fel som skickas av Flash-miljön vid skriv- och läsåtgärder.
I följande exempel används både en
try..catch
-sats och felhändelsehanterare för att visa fel som upptäcks när ett försök görs att läsa en lokal fil. Du kan på de platser som markeras med kommentaren ”your error handling code here” lägga till en mer sofistikerad kod för att ge användarna flera alternativ eller möjlighet att välja att hantera felet automatiskt:
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
}
}
}
Arbeta med statusförändringshändelser
Flash-miljöer ändrar värdet på egenskapen
netStatus.info.level
eller
status.level
dynamiskt för de klasser som har stöd för egenskapen
level
när ett program körs. Klasser med egenskapen
netStatus.info.level
är NetConnection, NetStream och SharedObject. De klasser som innehåller egenskapen
status.level
är HTTPStatusEvent, Camera, Microphone och LocalConnection. Du kan skriva en hanterarfunktion för att besvara ändringar i
level
-värdet och för att spåra kommunikationsfel.
I följande exempel används funktionen
netStatusHandler()
för att testa värdet för egenskapen
level
. Om egenskapen
level
indikerar att ett fel har inträffat kommer meddelandet ”Video stream failed” att spåras av koden.
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);
}
}
}
|
|
|