Reagieren auf Fehlerereignisse und Status

Flash Player 9 und höher, Adobe AIR 1.0 und höher

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); 
        } 
    } 
}