對錯誤事件和狀態做出回應

ActionScript 3.0 在錯誤處理方面最重要的一項改良,就是支援對非同步執行階段錯誤回應的錯誤事件處理(如需非同步錯誤的定義,請參閱錯誤類型)。

您可以建立事件偵聽程式與事件處理常式,回應錯誤事件。許多類別在傳送錯誤事件時,所採用的方式都和傳送其它事件相同。例如,XMLSocket 類別的實體通常會傳送三種類型的事件:Event.CLOSEEvent.CONNECTDataEvent.DATA。然而,當問題發生時,XMLSocket 類別可以傳送 IOErrorEvent.IOErrorSecurityErrorEvent.SECURITY_ERROR。如需有關事件偵聽程式和事件處理常式的詳細資訊,請參閱處理事件

錯誤事件可區分為下列兩種:

副主題

處理錯誤事件
處理狀態變更事件

處理錯誤事件

ErrorEvent 類別及其子類別所包含的錯誤類型,可用來處理 Flash Player 在嘗試讀取或寫入資料時所傳送的錯誤。

下列範例會使用 try..catch 陳述式和錯誤事件處理常式,顯示在嘗試讀取本機檔案時所偵測到的任何錯誤。您可以加入較複雜的處理程式碼,以便為使用者提供選項,或是在註解「您的錯誤處理程式碼在這裡」所指示的地方自動處理錯誤:

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);
                // 您的錯誤處理程式碼在這裡
            }
            myMP3.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
        }

        private function linkHandler(linkEvent:TextEvent):void
        {
            playMP3(linkEvent.text);
            // 您的錯誤處理程式碼在這裡
        }
        
        private function errorHandler(errorEvent:IOErrorEvent):void
        {
            trace(errorEvent.text);
            // 您的錯誤處理程式碼在這裡
        }
    }
}

處理狀態變更事件

Flash Player 會針對支援 level 屬性的類別,動態變更 netStatus.info.levelstatus.level 屬性的值。具有 netStatus.info.level 屬性的類別是 NetConnection、NetStream 和 SharedObject。具有 status.level 屬性的類別是 HTTPStatusEvent、Camera、Microphone 和 LocalConnection。您可以撰寫處理常式函數,以回應 level 值的變更並追蹤通訊錯誤。

下列範例會使用 netStatusHandler() 函數來測試 level 屬性的值。如果 level 屬性指出遇到了錯誤,程式碼便會追蹤訊息 "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("視訊串流已失敗")
            }
            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

 

有新的意見加入至這個頁面時,傳送電子郵件給我 | 意見報告

目前頁面: http://livedocs.adobe.com/flash/9.0_tw/main/00000104.html