当我在调试Flash播放器中运行Flex应用程序时,只要发生意外情况,我就会弹出异常.但是,当客户使用该应用程序时,他不使用调试Flash播放器.在这种情况下,他没有弹出异常,但他的UI不起作用.
因此,出于可支持性原因,我想捕获Flex UI中任何可能发生的异常,并在Flex内部弹出窗口中显示错误消息.通过使用Java,我只是将整个UI代码封装在try/catch块中,但是在Flex中使用MXML应用程序我不知道,我可以在哪里执行这样的通用try/catch.
无法通知Flex 3中未捕获的异常.Adobe已了解此问题,但我不知道他们是否计划创建变通方法.
目前唯一的解决方案是将try/catch放在逻辑位置,并确保您正在侦听任何调度它们的ERROR(或FAULT for webservices)事件.
编辑:此外,实际上不可能捕获从事件处理程序抛出的错误.我在Adobe Bug系统上记录了一个错误.
更新2010-01-12:Flash 10.1和AIR 2.0现在支持全局错误处理(均处于测试阶段),并通过订阅LoaderInfo.uncaughtErrorEvents的UNCAUGHT_ERROR事件来实现.以下代码取自livedocs上的代码示例:
public class UncaughtErrorEventExample extends Sprite { public function UncaughtErrorEventExample() { loaderInfo.uncaughtErrorEvents.addEventListener( UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); } 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 } }
在Adobe错误管理系统中有一个错误/功能请求.如果它对你很重要,请投票给它.
http://bugs.adobe.com/jira/browse/FP-444