在 Flash AS3 中,我想编写单个try catch块以捕获整个班级中的任何错误。
比如我在myClass.as中有很多函数。我不想在每个函数中编写 try catch 块以捕获此函数中的错误。
有什么方法可以做到这一点吗?
谢谢!
问问题
30493 次
3 回答
8
你不能!除了 AS3 之外,即使在其他语言中也没有这样简单的方法,除非他们使用 AOP 方法来做到这一点。
最好的做法是让你的类冒泡错误(异常)并让更高层捕获并处理错误。
编辑- 关于评论
实际上这个想法是自然的方式..你仍然需要手动捕捉每一个可能的错误。我给你举个例子。请注意,该示例的目的仅是为了清楚地了解较低层和较高层。
例如,您在中间层(您的业务流程)中有一个类:
public class MyBussiness {
public function loadImages(){
//for example here is a block of method
//possibly throws exception.
}
public function getLoan(){
//lets assume here too
}
}
在更高的层(我假设在您的视图中 - MXML)您会捕获如下异常:
var myBussiness:MyBussiness = new MyBussiness():
try {
myBussiness.loadImages();
//any other sequence process
myBussiness.getLoan();
}
catch(error:Error){
//here you process error
//show it to user or make LOG
}
它仍然无法像您期望的那样发挥作用,但这是最佳实践。Rember 仅将 try catch 仅放在可能引发错误的代码上,因为 try catch 很昂贵。
于 2010-08-11T06:20:35.210 回答
4
最好的方法是使用 try catch:
try{
//your command
} catch(e:Error){
//your command
}
于 2010-08-11T06:30:51.440 回答
1
您可以使用 class.catch 捕获程序中所有未处理的错误UncaughtErrorEvent
。
所以,可能就是你想要的。文档中有一个示例(您可以放在addEventListener
主类的构造函数中):
package
{
import flash.display.Sprite;
import flash.events.ErrorEvent;
import flash.events.MouseEvent;
import flash.events.UncaughtErrorEvent;
public class UncaughtErrorEventExample extends Sprite
{
public function UncaughtErrorEventExample()
{
loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
drawUI();
}
private function uncaughtErrorHandler(event:UncaughtErrorEvent):void
{
if (event.error is Error)
{
var error:Error = event.error as Error;
// do something with the error
}
else if (event.error is ErrorEvent)
{
var errorEvent:ErrorEvent = event.error as ErrorEvent;
// do something with the error
}
else
{
// a non-Error, non-ErrorEvent type was thrown and uncaught
}
}
private function drawUI():void
{
var btn:Sprite = new Sprite();
btn.graphics.clear();
btn.graphics.beginFill(0xFFCC00);
btn.graphics.drawRect(0, 0, 100, 50);
btn.graphics.endFill();
addChild(btn);
btn.addEventListener(MouseEvent.CLICK, clickHandler);
}
private function clickHandler(event:MouseEvent):void
{
throw new Error("Gak!");
}
}
}
See the docs, please.
于 2017-04-24T06:53:49.367 回答