尝试在我的项目中实现新的FP 10.1全局错误处理程序,但无论我做什么,任何未捕获的错误仍将显示异常窗口(在SWF的调试版本和发布版本中)。我想要做的就是阻止这些弹出窗口,而是向我的记录器发送一条消息。这是我的代码......
编辑:我现在简化了代码。有人可以帮我一个忙,测试下面的课,看看它对他有用吗?因为它不适合我! ...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);
}
}
}
答案 0 :(得分:1)
文档说:
调度事件的UncaughtErrorEvents对象与LoaderInfo对象或Loader对象相关联。
因此,您必须聆听最顶层显示对象的loaderInfo
uncaughtErrorEvents
属性:
loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
答案 1 :(得分:1)
我遇到了与上面相同的问题 - 我引用了stage.loadInfo,认为当引用阶段时,它会捕获所有未捕获的错误。但是,这不起作用,你必须逐字地遵循grapefukt的建议:在实际的基础显示对象上,放置代码
loaderInfo.uncaughtErrorEvents.add...
当您尝试放置stage.loaderInfo
或frame.loaderInfo
时,它无效。
在我的情况下,我不得不将它放在扩展基本显示对象的类中。很奇怪。
答案 2 :(得分:0)
您必须将侦听器设置为不是特定视图,而是设置为主舞台对象,因为它位于显示列表的顶部(从而拾取其任何子节点的任何异常)。
答案 3 :(得分:0)
更新:我想我可能知道为什么你认为这不起作用。我犯了在调试器内部进行测试的错误。当调试器停止运行时错误时,我认为这证明我的uncaughtErrorHandler函数不起作用。事实上,这是错误的。这只是调试器的一个怪癖。调试器仍将停止,就好像它是一个未处理的错误或异常,但如果再次按Run,您将看到它执行错误处理代码。有关详细信息,请参阅我的主题Flex 4.0/4.5 global error handling。
原始回复: 我正在寻找相同的信息。 API文档中的所有示例和关于该主题的各种博客都不适用于我。我只尝试过loaderInfo,stage.loaderInfo,systemManager.loaderInfo ......它没什么区别。我甚至在一个测试用例中尝试了所有这些!正在设置addEventListener,但未捕获的错误未触发uncaughtErrorHandler。哎呀。我浪费了太多时间在这上面!我将它简化为一个非常简单的程序,除了主mxml文件中的所有代码之外。
这个怎么样:有人可以发布一个全局错误处理示例吗?我正在使用Flex SDK 4.1(我也试过4.5),在mx:基于应用程序的mxml Flex项目中定位FP 10.1(或4.5 for 4.5)。