加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex as3 处理错误

发布时间:2020-12-15 05:14:34 所属栏目:百科 来源:网络整理
导读:?处理错误 ? 问题 我想让程序自己检测和处理遇到的错误。 解决办法 当检测到错误时使用 throw 语句抛出异常。把可能出现错误的代码都放到 try 块中,然后在catch 块中进行错误处理。 讨论 Flash 播放器 8.5 开始支持 try/catch 方法来处理错误。这意味着可以
?处理错误
?
问题
我想让程序自己检测和处理遇到的错误。
解决办法
当检测到错误时使用 throw 语句抛出异常。把可能出现错误的代码都放到 try 块中,然后在catch 块中进行错误处理。
讨论
Flash 播放器 8.5 开始支持 try/catch 方法来处理错误。这意味着可以灵活的处理遇到的错误了。除了语法错误(这时编译器就通不过),其他类型的错误如非法数据等都可以自己处理。
处理异常包括两个部分,抛出异常和捕获异常。有些异常系统会自动抛出,比如 IllegalOperationError,MemoryError,和 ScriptTimeoutError. 它们都在 flash.errors 包中。除了系统定义的错误外也可以抛出自定义错误,然后捕获它进行处理。使用 throw 语句抛出一个Error 对象或Error 子类实例,比如:
throw new Error("A general error occurred.");
正如我们看到的,Error 构造器接受一个参数,这个信息和这个错误相关联。这个参数是可选的,依赖于你怎样处理这个错误,你可以不使用,但是大多数情况下都指定一个错误信息作为调试目的。
一旦异常被抛出,Flash就会暂停当前进程去寻找 catch 块去处理异常。任何有潜在错误的代码都要放在 try 块中,如果异常抛出,只有它所在的 try 块被暂停,然后相关联的 catch 块被调用,看下面的例子:
try {
? trace("This code is about to throw an error.");
? throw new Error("A general error occurred.");
? trace("This line won't run");
}
catch (errObject:Error) {
? trace("The catch block has been called.");
? trace("The message is: " + errObject.message);
}

上面的代码数出以下信息:
This code is about to throw an error.
The catch block has been called.
The message is: A general error occurred.
当然,上面的代码还是过于简单,但是这是个基本框架,可以看到只要抛出异常,try 块就会退出,catch 块被执行,传递了一个 Error 对象给 catch.
更多情况下,异常是从函数或方法中抛出的,Flash 会检测该函数是否在 try 块内被调用,如果是,则调用相应的 catch 块。
private function displayMessage(message:String):void {
? if(message == undefined) {
??? throw new Error("No message was defined.");
? }
? trace(message);
}
?
try {
? trace("This code is about to throw an error.");
? displayMessage(? );
? trace("This line won't run");
}
catch (errObject:Error) {
? trace("The catch block has been called.");
? trace("The message is: " + errObject.message);
}
上面的代码输出以下内容:
This code is about to throw an error.
The catch block has been called.
The message is: No message was defined.
如果你不肯定你的函数或方法会在何时或如何抛出异常,这时就应该在try块进行调用。
// 定一个在指定的sprite里的画矩形函数。
private function drawRectangle(sprite:Sprite,newWidth:Number,newHeight:Number):void {
?
? // 检测长和宽的数值是否合法,否则抛出异常。
? if(isNaN(newWidth) || isNaN(newHeight)) {
??? throw new Error("Invalid dimensions specified.");
? }
?
? // 如无异常,则画出矩形
? sprite.graphics.lineStyle(1,1);
? sprite.graphics.lineTo(nWidth,0);
? sprite.graphics.lineTo(nWidth,nHeight);
? sprite.graphics.lineTo(0,0);
}
现在我们在 try/catch 语句内调用该函数。
try {
? drawRectangle(this,widthB,heightB);
}
catch(errObject:Error) {
? this.graphics.clear(? );
? tOutput.text = "An error occurred: " + errObject.message;
}
另外对于try/catch 语句,还可以加入 finally 块,finally 块包含的代码无论是否遇到异常都会被执行。例如下面的两个例子效果相同:
//没有使用finally:
private function displayMessage(message:String):void {
? try {
??? if(message == undefined) {
????? throw new Error("The message is undefined.");
??? }
??? trace(message);
? }
? catch (errObject:Error) {
??? trace(errObject.message);
? }
? trace("This is the last line displayed.");
}
//使用 finally:
private function displayMessage(message:String):void {
? try {
??? if(message == undefined) {
????? throw new Error("The message is undefined.");
??? }
??? trace(message);
? }
? catch (errObject:Error) {
??? trace(errObject.message);
? }
? finally {
??? trace("This is the last line displayed.");
? }
}

如果在catch中使用了return语句,那结果就不一样了:
//没有使用finally:
private function displayMessage(message:String):void {
? try {
??? if(message == undefined) {
????? throw new Error("The message is undefined.");
??? }
??? trace(message);
? }
? catch (errObject:Error) {
??? trace(errObject.message);
??? return;
? }
? // 这一句没有执行.
? trace("This is the last line displayed.");
}

//使用 finally:
private function displayMessage(message:String):void {
? try {
??? if(message == undefined) {
????? throw new Error("The message is undefined.");
??? }
??? trace(message);
? }
? catch (errObject:Error) {
??? trace(errObject.message);
??? return;
? }
? finally {
??? // 执行,不管是否有异常发生。
??? trace("This is the last line displayed.");
? }
}

通过这一节的学习,现在你可以建立复杂的异常处理系统。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读