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."); ? } } 通过这一节的学习,现在你可以建立复杂的异常处理系统。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |