ActionScript 3.0 中的错误处理

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

由于许多应用程序在没有构建错误处理逻辑的情况下也可以运行,因此开发人员往往会拖延在其应用程序中构建错误处理逻辑。但如果没有错误处理逻辑,应用程序很容易终止运行,或因某一操作无法按预期执行而让用户感到烦恼。ActionScript 2.0 具有一个 Error 类,可用来在自定义函数中构建逻辑,以便引发具有特定消息的异常。由于错误处理对于构建用户友好的应用程序至关重要,因此 ActionScript 3.0 提供了一个扩展的体系结构用来捕获错误。

注: 虽然用于 Adobe Flash Platform 的 ActionScript 3.0 参考中记录了许多方法引发的异常,但不可能包括每种方法可能引发的所有异常。对于某个方法,即使方法描述中确实列出了它可能引发的某些异常,但仍可能存在方法描述中未明确阐述的语法错误或其他问题而引发的异常。

ActionScript 3.0 错误处理的构成元素

ActionScript 3.0 提供了许多用来进行错误处理的工具,其中包括:

  • 错误类. ActionScript 3.0 中包括大量 Error 类,扩展了可产生错误对象的情形范围。每个错误类都可以帮助应用程序处理和响应特定的错误条件,无论这些错误条件是与系统错误相关(如 MemoryError 条件)、与代码编写错误相关(如 ArgumentError 条件)、与网络和通信错误相关(如 URIError 条件),还是与其他情形相关。有关每个类的详细信息,请参阅比较错误类

  • 更少的无提示失败。在 Flash Player 以前的版本中,只有明确使用了 throw 语句,才会产生并报告错误。对于 Flash Player 9 和最新的 Flash 运行时,本机 ActionScript 方法和属性会引发运行时错误。这些错误允许您更有效处理发生的异常,然后逐个响应每个异常。

  • 在调试期间显示清楚的错误消息。使用 Flash 运行时调试器版本时,有问题的代码或情形会生成可靠的错误消息,这有助于您轻松识别特定代码块失败的原因。这些消息有助于更高效地修复错误。有关详细信息,请参阅使用 Flash 运行时的调试版

  • 精确的错误指示可以向用户显示清楚的错误消息。在 Flash Player 的先前版本中,如果 upload() 调用不成功,则 FileReference.upload() 方法会返回布尔值 false,表示发生了五个可能错误中的一种。如果在 ActionScript 3.0 中调用 upload() 方法时出错,四个特有的错误有助于向最终用户显示更准确的错误消息。

  • 经过优化完善的错误处理。一些明显的错误是由许多常见原因引发的。例如,在 ActionScript 2.0 中,在填充 FileReference 对象之前,name 属性的值为 null(因此,在您可以使用或显示 name 属性前,请确保已将此值设置为 null 之外的值)。在 ActionScript 3.0 中,如果在填充 name 属性之前试图访问该属性,Flash Player 或 AIR 将引发 IllegalOperationError,通知您尚未设定该值,这时您可以使用 try..catch..finally 块来处理该错误。有关详细信息,请参阅使用 try..catch..finally 语句

  • 没有明显的性能缺点。与以前的 ActionScript 版本相比,使用 try..catch..finally 块仅占用很少的额外资源或根本不占用任何额外资源。

  • 允许针对特定异步错误事件构建侦听器的 ErrorEvent 类。有关详细信息,请参阅响应错误事件和状态

错误处理策略

只要应用程序未遇到会导致问题的情况,则即使未在程序代码中构建错误处理逻辑,应用程序仍然可以成功运行。但是,如果您没有主动处理错误,并且应用程序确实遇到了问题,用户在应用程序失败时将无从知道原因所在。

在应用程序中进行错误处理有几种不同的方式。下面概括介绍三种主要的错误处理方式:

  • 使用 try..catch..finally 语句。这些语句可以在发生同步错误时捕捉这些错误。可以将语句嵌套在一个层次中,以便在不同的代码执行级别捕获异常。有关详细信息,请参阅使用 try..catch..finally 语句

  • 创建您自己的自定义错误对象。您可以使用 Error 类创建您自己的自定义错误对象,以便跟踪应用程序中内置错误类型未涵盖的特定操作。然后,您可以对自定义错误对象使用 try..catch..finally 语句。有关详细信息,请参阅创建自定义错误类

  • 编写用以响应错误事件的事件侦听器和处理函数。使用此策略,您可以创建全局错误处理程序以处理类似事件,而无需在 try..catch..finally 代码块中复制许多代码。您还可以使用此方法来捕获异步错误。有关详细信息,请参阅响应错误事件和状态