Eine der spürbarsten Verbesserungen bei der Fehlerverarbeitung in ActionScript 3.0 ist die Unterstützung für die Fehlerereignisverarbeitung, um auf asynchrone Fehler beim Ausführen einer Anwendung reagieren zu können. (Definitionen für asynchrone Fehler finden Sie unter
Fehlertypen
.)
Sie können Ereignis-Listener und Ereignisprozeduren erstellen, um auf Fehlerereignisse zu reagieren. Viele Klassen lösen Fehlerereignisse auf dieselbe Weise wie andere Ereignisse aus. Beispielsweise lösen Instanzen der XMLSocket-Klasse normalerweise drei Ereignistypen aus:
Event.CLOSE
,
Event.CONNECT
und
DataEvent.DATA
. Beim Auftreten eines Problems kann die XMLSocket-Klasse jedoch auch die Ereignisse
IOErrorEvent.IOError
und
SecurityErrorEvent.SECURITY_ERROR
auslösen. Weitere Informationen zu Ereignis-Listenern und Ereignisprozeduren finden Sie unter
Verarbeiten von Ereignissen
.
Fehlerereignisse gehören einer der beiden folgenden Kategorien an:
-
Fehlerereignisse, die die ErrorEvent-Klasse erweitern
Die flash.events.ErrorEvent-Klasse enthält die Eigenschaften und Methoden zum Verwalten von Fehlern im Zusammenhang mit Netzwerk- oder Kommunikationsvorgängen, die in einer laufenden Anwendung auftreten. Die AsyncErrorEvent-, IOErrorEvent- und SecurityErrorEvent-Klassen erweitern die ErrorEvent-Klasse. Wenn Sie die Debugger-Version einer Flash-Laufzeitumgebung verwenden, werden Sie zur Laufzeit in Dialogfeldern über alle aufgetretenen Fehlerereignisse informiert, für die keine Listener-Funktion vorhanden ist.
-
Statusbasierte Fehlerereignisse
Die statusbasierten Fehlerereignisse beziehen sich auf die Eigenschaften
netStatus
und
status
der Netzwerk- und Kommunikationsklassen. Wenn eine Flash-Laufzeitumgebung beim Lesen oder Schreiben von Daten ein Problem auftritt, wird der Wert der
netStatus.info.level
-Eigenschaft oder der
status.level
-Eigenschaft (je nach verwendetem Klassenobjekt) auf
error
gesetzt. Sie können diesen Fehler in der Ereignisprozedurfunktion abfragen, indem Sie überprüfen, ob die
level
-Eigenschaft den Wert
error
hat.
Verwenden von Fehlerereignissen
Die ErrorEvent-Klasse und ihre Unterklassen enthalten Fehlertypen zum Verarbeiten von Fehlern, die in einer Flash-Laufzeitumgebung bei dem Versuch ausgelöst werden, Daten zu lesen oder zu schreiben.
Im folgenden Beispiel werden sowohl eine
try..catch
-Anweisung als auch Fehlerereignisprozeduren verwendet, um Fehler anzuzeigen, die beim Lesen einer lokalen Datei möglicherweise auftreten. An den mit „eigenen Fehlerverarbeitungscode hier einfügen“ gekennzeichneten Stellen können Sie anspruchsvolleren Verarbeitungscode einfügen, um Benutzern Optionen bereitzustellen oder aber Fehler automatisch zu verarbeiten:
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
}
}
}
Verwenden von Statusänderungsereignissen
Flash-Laufzeitumgebungen ändern den Wert der
netStatus.info.level
- oder
status.level
-Eigenschaften für die Klassen, die die
level
-Eigenschaft unterstützen, während der Ausführung der Anwendung automatisch. Folgende Klassen verfügen über die
netStatus.info.level
-Eigenschaft: NetConnection, NetStream und SharedObject. Die Klassen HTTPStatusEvent, Camera, Microphone und LocalConnection weisen die
status.level
-Eigenschaft auf. Sie können eine Prozedurfunktion programmieren, um auf Änderungen des Werts von
level
zu reagieren und Kommunikationsfehler zu verfolgen.
Im folgenden Beispiel wird mit einer
netStatusHandler()
-Funktion der Wert der
level
-Eigenschaft getestet. Wenn die
level
-Eigenschaft angibt, dass ein Fehler aufgetreten ist, wird die Meldung „Video stream failed“ (Video-Stream fehlgeschlagen) ausgegeben.
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);
}
}
}
|
|
|