[译] FLEX 里的全局错误处理

Posted by wpm on Feb 21, 2010 in Flex, Translations |
  • 资讯类型: 翻译
  • 来源页面: 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”);
        }
      }
    }

    这里下载代码

    Tags: ,