响应错误事件和状态

在 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);
            // 在此处添加错误处理代码
        }
    }
}

处理状态更改事件

对于支持 level 属性的类,Flash Player 会动态更改 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_cn/main/00000104.html