Flash CS3-Dokumentation |
|||
| Programmieren mit ActionScript 3.0 > Verarbeiten von Fehlern > Reagieren auf Fehler- und Statusereignisse | |||
Eine der spürbarsten Verbesserungen bei der Fehlerverarbeitung in ActionScript 3.0 ist die Unterstützung für die Fehlerereignisverarbeitung, um auf asynchrone Laufzeitfehler reagieren zu können. (Eine Definition asynchroner 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 in Verarbeiten von Ereignissen.
Fehlerereignisse gehören einer der beiden folgenden Kategorien an:
Die flash.events.ErrorEvent-Klasse enthält die Eigenschaften und Methoden zum Verwalten von Flash Player-Laufzeitfehlern im Zusammenhang mit Netzwerk- oder Kommunikationsvorgängen. Die Klassen AsyncErrorEvent, IOErrorEvent und SecurityErrorEvent erweitern die ErrorEvent-Klasse. Wenn Sie die Debugger-Version von Flash Player verwenden, werden Sie zur Laufzeit in Dialogfeldern über alle aufgetretenen Fehlerereignisse informiert, für die keine Listener-Funktion vorhanden ist.
Die statusbasierten Fehlerereignisse beziehen sich auf die Eigenschaften netStatus und status der Netzwerk- und Kommunikationsklassen. Wenn in Flash Player 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.
Die ErrorEvent-Klasse und ihre Unterklassen enthalten Fehlertypen zum Verarbeiten von Fehlern, die in Flash Player 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;
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);
// eigenen Fehlerverarbeitungscode hier einfügen
}
myMP3.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
private function linkHandler(linkEvent:TextEvent):void
{
playMP3(linkEvent.text);
// eigenen Fehlerverarbeitungscode hier einfügen
}
private function errorHandler(errorEvent:IOErrorEvent):void
{
trace(errorEvent.text);
// eigenen Fehlerverarbeitungscode hier einfügen
}
}
}
Flash Player ändert dynamisch den Wert der Eigenschaften netStatus.info.level und status.level bei den Klassen, die die level-Eigenschaft unterstützen. 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);
}
}
}
Flash CS3
Eine E-Mail an mich senden, wenn dieser Seite Kommentare hinzugefügt werden | Kommentarbericht
Aktuelle Seite: http://livedocs.adobe.com/flash/9.0_de/main/00000104.html