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");
    }
  }
}

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: