FLEX 里的全局错误处理
转自http://args.cn/post/2010/02/translation-flex-inside-the-global-error-handling/
----------------------------------------
资讯类型: 翻译
来源页面: http://www.summa-tech.com/blog/2010/01/04/global-error-handling-in-flex/
资讯原标题: Global Error Handling in Flex
资讯原作者: Brian Gray
FLEX 里的全局错误处理
我参与过不少大型的flex应用程序的开发,基本上所有关于平台的事情都让我感到高兴,包括快速构建原型,UI创建方面的强悍,不过运行时错误处理如此之难让我感到很郁闷。当程序缩放时,它会变得很难来保证它不会抛出一个运行时错误,默认的flash播放器没有任何响应,不给任何反馈和提示,这种事情将是不符合期望标准的。我找到了下面的这个方法(直到未来的flash player 10 bata版 支持这个)Jorg birkhold 描述的当任何错误抛出的时候,怎样调用事件分发器来抛出一个事件,代码如下:
private function onPreinitialize():void {
// setup global error handling
UIComponentGlobals.catchCallLaterExceptions = true;
systemManager.addEventListener(“callLaterError”, handleErrors);
}
我在主程序里添加了一个事件处理函数,做了如下操作:
1.在控制台里打印出堆栈信息以供调试、
2.弹出一个对话框给用户,这个要具体看抛出的是什么样的错误,当然这个不一定会显示到屏幕上,但是一定要确保平滑的过渡,并阻止用户进一步的交互操作
3.如果允许使用Javascript,那么调用JavaScript的方法,在这里你可以做一些你想要做的事情,但是我建议是让用户跳转到一个提示错误的页面,告诉他们那里出错了,给出正确的页面地址,并让他们回到刚刚出错的地方,重新开始。
public function handleErrors(event:Event):void {
if (event is DynamicEvent && event.hasOwnProperty(“error”)) {
// you could also send this back to your server
var error:Error = DynamicEvent(event).error as Error;
trace(“Error!\n” + error.getStackTrace());
Alert.show(“There has been an error in the application”, “”, Alert.OK);
if (ExternalInterface.available) {
ExternalInterface.call(“handleApplicationError”);
}
}
}