Flash CS3 文档 |
|||
| ActionScript 3.0 编程 > 处理错误 > 示例:CustomErrors 应用程序 | |||
CustomErrors 应用程序展示了构建应用程序时处理自定义错误的一些技巧。这些方法包括:
要获取该范例的应用程序文件,请访问 www.adobe.com/go/learn_programmingAS3samples_flash_cn。可以在 Samples/CustomError 文件夹中找到 CustomErrors 应用程序的文件。该应用程序包含以下文件:
|
文件 |
描述 |
|---|---|
|
CustomErrors.mxml 或 CustomErrors.fla |
Flash (FLA) 或 Flex (MXML) 中的主应用程序文件。 |
|
com/example/programmingas3/errors/ApplicationError.as |
一个类,用作 FatalError 类和 WarningError 类的基错误类。 |
|
com/example/programmingas3/errors/FatalError.as |
一个类,定义该应用程序可以引发的 FatalError 错误。该类扩展了自定义的 ApplicationError 类。 |
|
com/example/programmingas3/errors/Validator.as |
一个类,定义了用于验证用户提供的员工 XML 包的单个方法。 |
|
com/example/programmingas3/errors/WarningError.as |
一个类,定义了该应用程序可以引发的 WarningError 错误。该类扩展了自定义的 ApplicationError 类。 |
CustomErrors.mxml 文件包含该自定义错误应用程序的用户界面和一些逻辑。一旦调度了该应用程序的 creationComplete 事件,便会调用 initApp() 方法。该方法定义将由 Validator 类验证的示例 XML 包。以下显示的是 initApp() 方法的代码:
private function initApp():void
{
employeeXML =
<employee id="12345">
<firstName>John</firstName>
<lastName>Doe</lastName>
<costCenter>12345</costCenter>
<costCenter>67890</costCenter>
</employee>;
}
稍后,将在舞台上的 TextArea 组件实例中显示该 XML 包。这样就可以在尝试重新验证该 XML 包之前对其进行修改。
用户单击 Validate 按钮时,将调用 validateData() 方法。该方法使用 Validator 类中的 validateEmployeeXML() 方法来验证员工 XML 包。以下显示的是 validateData() 方法的代码:
public function validateData():void
{
try
{
var tempXML:XML = XML(xmlText.text);
Validator.validateEmployeeXML(tempXML);
status.text = "The XML was successfully validated.";
}
catch (error:FatalError)
{
showFatalError(error);
}
catch (error:WarningError)
{
showWarningError(error);
}
catch (error:Error)
{
showGenericError(error);
}
}
首先,使用 TextArea 组件实例 xmlText 内容创建一个临时的 XML 对象。接下来,调用自定义 Validator 类 (com.example.programmingas3/errors/Validator.as) 中的 validateEmployeeXML() 方法,并将这个临时 XML 对象作为参数传递给该方法。如果这个 XML 包是有效的,Label 组件实例 status 便会显示一条成功消息,然后应用程序退出。如果 validateEmployeeXML() 方法引发了一个自定义错误(即发生 FatalError、WarningError 或一般的 Error),则会执行相应的 catch 语句并调用 showFatalError()、showWarningError() 或 showGenericError() 方法。这几种方法均会在一个 Alert 组件中显示相应的消息,以通知用户发生了特定错误。每个方法还会用具体的消息更新 Label 组件实例 status。
如以下代码所示,如果尝试验证员工 XML 包时发生致命错误,则会在一个 Alert 组件中显示错误消息,并且禁用 TextArea 组件实例 xmlText 和 Button 组件实例 validateBtn:
public function showFatalError(error:FatalError):void
{
var message:String = error.message + "\n\n" + "Click OK to end.";
var title:String = error.getTitle();
Alert.show(message, title);
status.text = "This application has ended.";
this.xmlText.enabled = false;
this.validateBtn.enabled = false;
}
如果发生的是警告错误而不是致命错误,则会在 Alert 组件实例中显示错误消息,但不会禁用 TextField 和 Button 组件实例。showWarningError() 方法会在 Alert 组件实例中显示自定义的错误消息。该消息还会让用户决定是希望继续验证 XML 还是终止脚本。以下显示的是 showWarningError() 方法的代码:
public function showWarningError(error:WarningError):void
{
var message:String = error.message + "\n\n" + "Do you want to exit this application?";
var title:String = error.getTitle();
Alert.show(message, title, Alert.YES | Alert.NO, null, closeHandler);
status.text = message;
}
用户使用 Yes 或 No 按钮关闭 Alert 组件实例时,将调用 closeHandler() 方法。以下显示的是 closeHandler() 方法的代码:
private function closeHandler(event:CloseEvent):void
{
switch (event.detail)
{
case Alert.YES:
showFatalError(new FatalError(9999));
break;
case Alert.NO:
break;
}
}
如果用户选择单击警告错误 Alert 对话框中的 Yes 按钮来终止脚本,则会引发 FatalError,从而导致应用程序终止运行。
自定义的 Validator 类仅包含一个方法:validateEmployeeXML()。validateEmployeeXML() 方法使用单一参数 employee,该参数为要验证的 XML 包。validateEmployeeXML() 方法的代码如下所示:
public static function validateEmployeeXML(employee:XML):void
{
// checks for the integrity of items in the XML
if (employee.costCenter.length() < 1)
{
throw new FatalError(9000);
}
if (employee.costCenter.length() > 1)
{
throw new WarningError(9001);
}
if (employee.ssn.length() != 1)
{
throw new FatalError(9002);
}
}
员工必须属于一个(且只能属于一个)成本中心才能通过验证。如果员工不属于任何成本中心,该方法将引发 FatalError,该异常将向上冒泡到应用程序主文件中的 validateData() 方法。如果员工属于多个成本中心,则引发 WarningError。该 XML 验证程序最后检查用户是否只定义了一个社会安全号码(XML 包中的 ssn 节点)。如果具有不止一个 ssn 节点,则引发 FatalError 错误。
您可以向 validateEmployeeXML() 方法添加其它检查,例如,确保 ssn 节点包含的是有效号码,或者员工至少定义了一个电话号码和一个电子邮件地址,并且这两个值都是有效的。您还可以对该 XML 进行修改,使每个员工具有唯一的 ID 并指定其管理者的 ID。
ApplicationError 类用作 FatalError 类和 WarningError 类的基类。ApplicationError 类扩展了 Error 类,并且定义了自己的自定义方法和属性,其中包括定义一个错误 ID、严重程度以及包含自定义错误代码和消息的 XML 对象。该类还定义了两个静态常量,它们用于定义每种错误类型的严重程度。
ApplicationError 类的构造函数方法如下所示:
public function ApplicationError()
{
messages =
<errors>
<error code="9000">
<![CDATA[Employee must be assigned to a cost center.]]>
</error>
<error code="9001">
<![CDATA[Employee must be assigned to only one cost center.]]>
</error>
<error code="9002">
<![CDATA[Employee must have one and only one SSN.]]>
</error>
<error code="9999">
<![CDATA[The application has been stopped.]]>
</error>
</errors>;
}
XML 对象中的每个错误节点都包含一个唯一的数值代码和一条错误消息。使用 E4X 可以很容易地通过错误代码查找到相应的错误消息,如以下 getMessageText() 方法所示:
public function getMessageText(id:int):String
{
var message:XMLList = messages.error.(@code == id);
return message[0].text();
}
getMessageText() 方法仅使用一个整数参数 id 并返回一个字符串。该 id 参数就是要查找的错误的错误代码。例如,传递等于 9001 的 id 值将得到错误消息“Employee must be assigned to only one cost center”(只能为员工指定一个成本中心)。如果多个错误具有同一错误代码,ActionScript 将只为找到的第一个结果返回错误消息(所返回 XMLList 对象中的 message[0])。
该类中的下一个方法 getTitle() 不使用任何参数,并返回一个字符串值,其中包含此特定错误的错误 ID。该值用于 Alert 组件的标题中,让您轻松识别在验证 XML 包期间发生的具体错误。以下显示的是 getTitle() 方法的代码:
public function getTitle():String
{
return "Error #" + id;
}
ApplicationError 类中的最后一个方法是 toString()。该方法覆盖 Error 类中定义的函数,以便您可以自定义错误消息的显示。该方法将返回一个字符串,用于识别所发生错误的具体编号和消息。
public override function toString():String
{
return "[APPLICATION ERROR #" + id + "] " + message;
}
FatalError 类扩展了自定义的 ApplicationError 类并定义三个方法:FatalError 构造函数、getTitle() 和 toString()。第一个方法(即 FatalError 构造函数)仅使用一个整数参数 errorID,并使用 ApplicationError 类中定义的静态常量设置错误的严重程度,另外还调用 ApplicationError 类中的 getMessageText() 方法获取特定错误的错误消息。FatalError 构造函数如下所示:
public function FatalError(errorID:int)
{
id = errorID;
severity = ApplicationError.FATAL;
message = getMessageText(errorID);
}
FatalError 类中的下一个方法 getTitle() 覆盖先前在 ApplicationError 类中定义的 getTitle() 方法,并在标题后面追加文字“-- FATAL”以通知用户发生了致命错误。getTitle() 方法如下所示:
public override function getTitle():String
{
return "Error #" + id + " -- FATAL";
}
该类中的最后一个方法 toString() 覆盖 ApplicationError 类中定义的 toString() 方法。toString() 方法如下所示:
public override function toString():String
{
return "[FATAL ERROR #" + id + "] " + message;
}
WarningError 类扩展了 ApplicationError 类,它与 FatalError 类几乎完全相同,只是字符串稍微有些不同,另外它还将错误严重程度设置为 ApplicationError.WARNING 而不是 ApplicationError.FATAL,如以下代码所示:
public function WarningError(errorID:int)
{
id = errorID;
severity = ApplicationError.WARNING;
message = super.getMessageText(errorID);
}
Flash CS3
当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000109.html