http://www.flash-home.com/article/1116.html 问题 我想让程序自己检测和处理遇到的异常。 解决办法 当检测到错误时使用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, 0, 1); sprite.graphics.lineTo(nWidth, 0); sprite.graphics.lineTo(nWidth, nHeight); sprite.graphics.lineTo(0, 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 displayMessagetry { 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."); } } 通过这一节的学习,现在你可以建立复杂的异常处理系统。
1 楼
阿呆jinsss
2012-04-16
除了排版有点难看之外,说得很简洁明了,谢谢了~