响应错误事件和状态Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本 在 ActionScript 3.0 中,对错误处理最为明显的一项改进就是支持对应用程序运行时出现的异步错误予以响应。(有关异步错误的定义,请参阅错误类型。) 可以创建事件侦听器和事件处理函数来响应错误事件。对于许多类来说,它们调度错误事件的方式与调度其他事件的方式相同。例如,一般情况下,XMLSocket 类实例调度三种类型的事件:Event.CLOSE、Event.CONNECT 和 DataEvent.DATA。但是,当发生问题时,XMLSocket 类还可以调度 IOErrorEvent.IOError 或 SecurityErrorEvent.SECURITY_ERROR。有关事件侦听器和事件处理函数的详细信息,请参阅处理事件。 错误事件分为两类:
使用错误事件ErrorEvent 类及其子类包含用于处理 Flash 运行时尝试读写数据时调度的错误的错误类型。 下面的示例同时使用了 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; 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 } } } 使用状态更改事件对于支持 level 属性的类,Flash 运行时会在应用程序运行时动态更改 netStatus.info.level 或 status.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("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); } } } |
|