当前位置:  开发笔记 > Android > 正文

如何捕获Flex中的所有异常?

如何解决《如何捕获Flex中的所有异常?》经验,为你挑选了2个好方法。

当我在调试Flash播放器中运行Flex应用程序时,只要发生意外情况,我就会弹出异常.但是,当客户使用该应用程序时,他不使用调试Flash播放器.在这种情况下,他没有弹出异常,但他的UI不起作用.

因此,出于可支持性原因,我想捕获Flex UI中任何可能发生的异常,并在Flex内部弹出窗口中显示错误消息.通过使用Java,我只是将整个UI代码封装在try/catch块中,但是在Flex中使用MXML应用程序我不知道,我可以在哪里执行这样的通用try/catch.



1> Richard Szal..:

无法通知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
        }
    }


若要添加此答案:如果您在Flash Player的调试版本中运行,则仍会弹出常规运行时错误对话框.要防止这种情况,请在全局错误处理程序中调用event.preventDefault().
我上面的代码需要Flex 4.但是,如果使用`((IEventDispatcher)loaderInfo ["uncaughtErrorEvents"]).addEventListener("uncaughtError",handlerFunction)`,它应该适用于任何运行10.1的SDK,因为属性将存在于播放器中的运行时.您甚至可以使用`if(loaderInfo.hasProperty("uncaughtErrorEvents"){}`来包装它,以确保它不会在Flash 9/10中中断(当然,错误处理不起作用,但它不会崩溃)

2> 小智..:

在Adobe错误管理系统中有一个错误/功能请求.如果它对你很重要,请投票给它.

http://bugs.adobe.com/jira/browse/FP-444

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有