Flash CS3 文档 |
|||
| ActionScript 3.0 编程 > 处理错误 > 响应错误事件和状态 | |||
在 ActionScript 3.0 中,对错误处理最为明显的一项改进就是支持对异步运行时错误予以响应。(有关异步错误的定义,请参阅错误类型。)
可以创建事件侦听器和事件处理函数来响应错误事件。对于许多类来说,它们调度错误事件的方式与调度其它事件的方式相同。例如,一般情况下,XMLSocket 类实例调度三种类型的事件:Event.CLOSE、Event.CONNECT 和 DataEvent.DATA。但是,当发生问题时,XMLSocket 类还可以调度 IOErrorEvent.IOError 或 SecurityErrorEvent.SECURITY_ERROR。有关事件侦听器和事件处理函数的详细信息,请参阅处理事件。
错误事件分为两类:
flash.events.ErrorEvent 类包含用于管理有关网络和通信操作的 Flash Player 运行时错误的属性和方法。AsyncErrorEvent、IOErrorEvent 和 SecurityErrorEvent 类扩展了 ErrorEvent 类。如果使用的是 Flash Player 的调试版,则会出现一个对话框,向您告知播放器在运行时遇到的、没有侦听器函数的错误事件。
基于状态的错误事件与网络和通信类的 netStatus 和 status 属性有关。如果 Flash Player 在读写数据时遇到问题,netStatus.info.level 或 status.level 属性(取决于使用的类对象)的值将被设置为值 "error"。可以通过检查事件处理函数中的 level 属性是否包含值 "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.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("视频流失败")
}
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