2010-07-23 66 views
2

试图在我的项目中实现新的FP 10.1全局错误处理程序,但无论我做什么未被捕获的错误,都将显示“异常”窗口(包括调试版本和发行版本SWF)。我想要做的就是防止这些弹出窗口,而是发送一条消息给我的记录器。这里是我的代码...Flash Player 10.1的全局错误处理程序不起作用

编辑:我现在简化了代码。有人能帮我一个忙,并测试下面的课程,看看它是否适用于他?因为它不适合我! ...

package 
{ 
    import flash.display.Sprite; 
    import flash.events.UncaughtErrorEvent;  

    public class GlobalErrorHandlerTest extends Sprite 
    { 
     public function GlobalErrorHandlerTest() 
     { 
      stage.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError); 
      throw new Error(); 
     }   

     private function onUncaughtError(e:UncaughtErrorEvent):void 
     { 
      var message:String; 
      if (e.error["message"]) 
      { 
       message = e.error["message"]; 
      } 
      else if (e.error["text"]) 
      { 
       message = e.error["text"]; 
      } 
      else 
      { 
       message = e.error["toString"](); 
      } 

      trace("Uncaught Error: " + e.text); 
     } 
    } 
} 

回答

1

我有同样的问题,因为上面 - 我引用stage.loadInfo,认为作为参考该阶段,它会捕获所有未被捕获的错误。然而,这是不行的,你必须真正遵循grapefukt的建议逐字:在实际的基本展示对象,将代码

loaderInfo.uncaughtErrorEvents.add...

当您尝试放到stage.loaderInfoframe.loaderInfo,它没有任何效果。

就我而言,我不得不将它放在扩展基本显示对象的类中。很奇怪。

+0

我希望这会工作,但唉,它不适合我。我已将事件侦听器直接添加到我的基本显示对象。通常这个代码应该被它抓住,对吧? ()函数():void { \t throw new Error(“foo!”); },3000); ' 但它没有。另外我想它应该像AIR一样对基于Web的Flash起作用? – BadmintonCat 2011-04-12 04:29:05

+1

Haaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr !!!!我现在知道这个问题是什么。这是一个误会!事件处理程序被调用,但错误仍然会冒泡并打开Flash播放器中的异常窗口。所以解决方案是event.preventDefault()! – BadmintonCat 2011-04-28 12:05:51

0

你不能设置监听到一个特定的视图,但在主舞台的对象,因为它是在显示列表的顶部(因此拿起任何其子的任何异常) 。

+0

“查看”实际上是最顶层的显示对象容器(它只是给出一个属性,我的主类)。如果我使用view.stage.loaderInfo.uncaughtErrorEvents.addEventListener ... – BadmintonCat 2010-07-23 07:18:12

+0

嗯任何其他想法为什么(新)上面的代码将无法正常工作? – BadmintonCat 2010-07-25 03:37:25

1

的文档说:

分派事件与任一个LoaderInfo对象或Loader对象相关联的UncaughtErrorEvents对象通常。

因此,你一定要听loaderInfo是你的顶级显示对象的uncaughtErrorEvents属性:

loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); 
+0

仍然没有运气!我没有想法! _anyone_可以确认上面的例子对他们有效吗? – BadmintonCat 2010-08-25 14:21:47

0

更新:我想我可能知道你为什么认为这不起作用。我犯了在调试器内部测试的错误。当调试器停止运行时错误时,我认为这证明我的uncaughtErrorHandler函数没有工作。事实上,这是错误的。这只是调试器的一个怪癖。调试器仍然会停止,就好像它是未处理的错误或异常一样,但如果再次按下Run,则会看到它执行错误处理代码。请参阅我的线程Flex 4.0/4.5 global error handling了解更多信息。

原始回复: 我在寻找相同的信息。 API文档中的示例和关于此主题的各种博客都不适用于我。我只尝试loaderInfo,stage.loaderInfo,systemManager.loaderInfo ...它没有区别。我甚至在单个测试案例中尝试了所有这些方法! addEventListener正在设置,但未捕获的错误不会触发uncaughtErrorHandler。哎呀。我在这方面浪费了太多时间!我将它简化为一个非常简单的程序,除了使用主mxml文件中的所有代码之外。

这个怎么样:有人可以发布一个全球错误处理的例子,工作吗?我在一个mx:基于应用程序的mxml Flex项目中使用了Flex SDK 4.1(我也尝试过使用4.5),将FP 10.1(或4.5 for 10.2)作为目标。

我的主题:Flex 4.0/4.5 global error handling