错误类型
Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本
开发和运行应用程序时,您会遇到不同类型的错误和错误术语。下面列出了主要的错误类型和术语:
-
编译时错误,这类错误在代码编译期间由 ActionScript 编译器引发。
当代码中的语法问题导致应用程序无法生成时即会发生编译时错误。
-
运行时错误,这类错误在应用程序编译之后运行时发生。
运行时错误指在 Flash 运行时(如 Adobe Flash Player 或 Adobe AIR)中播放 SWF 文件时产生的错误。大多数情况下,您会在出现运行时错误时处理这些错误,将错误报告给用户,并采取相应的步骤让应用程序继续运行。如果遇到的错误是致命错误,例如无法连接到远程网站或无法加载所需的数据,您可以使用错误处理让应用程序顺利地完成运行。
-
同步错误
是在调用函数时发生的运行时错误 — 例如,当您尝试使用特定方法但传递到该方法的参数无效时,Flash 运行时会引发异常。多数错误都是在语句执行时同步发生,并且控制流会立即传递给最适用的
catch
语句。
例如,以下代码将会引发一个运行时错误,原因是在程序试图上载文件之前没有调用
browse()
方法:
var fileRef:FileReference = new FileReference();
try
{
fileRef.upload(new URLRequest("http://www.yourdomain.com/fileupload.cfm"));
}
catch (error:IllegalOperationError)
{
trace(error);
// Error #2037: Functions called in incorrect sequence, or earlier
// call was unsuccessful.
}
在本例中,将同步引发一个运行时错误,原因是 Flash Player 断定在试图上载文件之前没有调用
browse()
方法。
有关同步错误处理的详细信息,请参阅
在应用程序中处理同步错误
。
-
异步
错误
是发生在正常程序流之外的运行时错误。这些错误可生成事件,而事件侦听器可对其进行捕获。在异步操作中,函数发起操作但并不等待操作完成。您可以创建错误事件侦听器,以等待应用程序或用户尝试某操作。如果操作失败,则使用事件侦听器捕捉错误并响应错误事件。然后,该事件侦听器调用一个事件处理函数,以便通过一种有益的方式来响应错误事件。例如,事件处理函数可以启动一个对话框,以提示用户解决该错误。
下面以前面提到的文件上载同步错误为例。如果在文件上载开始之前成功调用了
browse()
方法,则 Flash Player 会调度若干个事件。例如,上载开始时,将调度
open
事件。文件上载操作成功完成时,将调度
complete
事件。由于事件处理是异步进行的(即,不在特定、已知、预先指定的时间发生),因此使用
addEventListener()
方法可以侦听这些特定的事件,如以下代码所示:
var fileRef:FileReference = new FileReference();
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(Event.OPEN, openHandler);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
fileRef.browse();
function selectHandler(event:Event):void
{
trace("...select...");
var request:URLRequest = new URLRequest("http://www.yourdomain.com/fileupload.cfm");
request.method = URLRequestMethod.POST;
event.target.upload(request);
}
function openHandler(event:Event):void
{
trace("...open...");
}
function completeHandler(event:Event):void
{
trace("...complete...");
}
有关异步错误处理的详细信息,请参阅
响应错误事件和状态
。
-
未捕获的异常,这类错误在引发后并没有相应的逻辑(如 catch 语句)来响应它。
应用程序引发错误后,如果在当前级别或更高级别找不到适当的
catch
语句或事件处理函数来处理错误,则认为该错误是未捕获的异常。
如果出现未捕获的错误,运行时会调度
uncaughtError
事件。此事件也称为“全局错误处理程序”。SWF 的 UncaughtErrorEvents 对象调度此事件,可通过
LoaderInfo.uncaughtErrorEvents
属性获得该对象。如果没有为
uncaughtError
事件注册任何侦听器,只要未捕获的错误不停止 SWF,运行时就会忽略未捕获的错误并尝试继续运行。
除调度
uncaughtError
事件之外,Flash 运行时的调试器版本将通过终止当前脚本来响应未捕获的错误。然后,在
trace
语句输出中显示未捕获的错误,或将错误消息写入日志文件。如果异常对象为 Error 类的实例或其子类之一,则输出中也显示堆栈跟踪信息。有关使用 Flash 运行时调试版的详细信息,请参阅
使用 Flash 运行时的调试版
。
注:
处理 uncaughtError 事件时,如果错误事件由 uncaughtError 事件处理函数引发,该事件处理函数将被多次调用。这将导致异常的无限循环。建议您避免这样的情况出现。
|
|
|