自定义组件的getStyle中的空指针异常

时间:2012-01-07 18:04:44

标签: flex module nullpointerexception

运行我的应用程序时出现这个奇怪的错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.core::UIComponent/getStyle()[E:\dev\hero_private\frameworks\projects\framework\src\mx\core\UIComponent.as:11104]
at mx.core::UIComponent/getConstraintValue()[E:\dev\hero_private\frameworks\projects\framework\src\mx\core\UIComponent.as:9073]
at mx.core::UIComponent/get horizontalCenter()[E:\dev\hero_private\frameworks\projects\framework\src\mx\core\UIComponent.as:9242]
at spark.layouts::BasicLayout/measure()[E:\dev\hero_private\frameworks\projects\spark\src\spark\layouts\BasicLayout.as:253]
at spark.components.supportClasses::GroupBase/measure()[E:\dev\hero_private\frameworks\projects\spark\src\spark\components\supportClasses\GroupBase.as:1148]
at mx.core::UIComponent/measureSizes()[E:\dev\hero_private\frameworks\projects\framework\src\mx\core\UIComponent.as:8496]
at mx.core::UIComponent/validateSize()[E:\dev\hero_private\frameworks\projects\framework\src\mx\core\UIComponent.as:8420]
at spark.components::Group/validateSize()[E:\dev\hero_private\frameworks\projects\spark\src\spark\components\Group.as:1012]
at mx.managers::LayoutManager/validateSize()[E:\dev\hero_private\frameworks\projects\framework\src\mx\managers\LayoutManager.as:665]
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\hero_private\frameworks\projects\framework\src\mx\managers\LayoutManager.as:816]
at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\hero_private\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()

它发生在我的自定义组件中(不会弄乱样式或任何东西),仅当我将应用程序的这部分加载为模块时。 _nonInheritingStyles属性设置为null,这看起来像是错误的组件初始化。任何猜测?感谢

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题 - 只有4.6。 Flex 4.5工作正常。我认为这是由于ModuleInfo处理加载的方式发生了变化。预加载器尝试解析一堆图形调用,但由于父级没有建立图形组件,因此调用会中断。 (即使你使用覆盖和super.getStyle()调用的try-catch保护getStyle(),其他图形调用也会中断。)

替代方法:如果我将一个组件添加到我的顶级mxml(Application子类),问题就会消失。我用了

< s:BorderContainer width =“100%”height =“100%”x =“0”y =“0”/>

了解最轻量级的组件将会很有用。

我猜测Preloader在第一个模块加载之前至少需要一个启动画面。否则它只是一个Flex bug。