我偶尔会遇到Flex框架引发的异常。通常来自呈现itemRenderer等的ListBase代码。我正在寻找技术来找出哪怕是我的ListBase实例甚至抛出错误。用于调试Flex Framework错误的技巧
困难在于当调用堆栈的顶部在callLaterDispatcher()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.controls.listClasses::ListBase/addToFreeItemRenderers()
at mx.controls.listClasses::ListBase/reduceRows()
at mx.controls.listClasses::ListBase/updateDisplayList()
at mx.controls.listClasses::TileBase/updateDisplayList()
at mx.controls.listClasses::ListBase/validateDisplayList()
at mx.managers::LayoutManager/validateDisplayList()
at mx.managers::LayoutManager/doPhasedInstantiation()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/callLaterDispatcher2()
at mx.core::UIComponent/callLaterDispatcher()
源于看着一个断点我在ListBase中设置:: addToFreeItemRenderers,我可以看到,该项目是空这是被传递给函数,像这样:
protected function addToFreeItemRenderers(item:IListItemRenderer):void
{
// The following item is NULL when the exception is being thrown...
if (item == null) return;
DisplayObject(item).visible = false;
var factory:IFactory = factoryMap[item];
...
我如何找出我需要弄清楚?我之前已经解决了类似的问题,但是我必须使用魔法和巫术,并进行猜测并在我的代码中调用callLater调用来修复。
谢谢
我要补充一点,我可以随时猴补丁检测ListBase和处理项目== NULL条件,但是这可能会最终导致了很多问题。 – taudep 2010-09-15 18:07:12