在 Scroller.as 类第 2139 行中,我收到以下错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at spark.components::Scroller/focusInHandler()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\Scroller.as:2139]
at flash.display::Stage/set focus()
来自 Scroller.as
/**
* @private
* Listens for any focusIn events from descendants
*/
override protected function focusInHandler(event:FocusEvent):void
{
super.focusInHandler(event);
// When we gain focus, make sure the focused element is visible
if (viewport && ensureElementIsVisibleForSoftKeyboard)
{
var elt:IVisualElement = focusManager.getFocus() as IVisualElement;
lastFocusedElement = elt;
}
}
由于这是框架代码,我有什么选项可以阻止它?
上下文
我创建了一个弹出 TitleWindow,在其中添加了一个 Module 并显示它。Module 有几个 State,每个 State 中是一个 Group,一个 Group 有一个 List,那个 List 有一个 ItemRenderer,那个 ItemRenderer 有一个 Checkbox。
该模块还有一个菜单。打开菜单时,弹出菜单会列出模块可用的状态。当从弹出菜单中选择一个项目时,我会更改为另一种状态。
当状态改变并且最后一项是复选框时,就会产生错误。至少这是我认为正在发生的事情。我推断这是因为在 Scroller 类中,处理程序正在处理一个事件。在那个事件上是当前的目标。当前目标是复选框。
更新- 重现步骤
// inside the Application.mxml
// define variables
public var popup:Group;
public var titleWindow:TitleWindow;
// shows pop up
public function showInspector():void {
// inside show inspector method
// create new inspector container
popup = new InspectorContainer(); // a group implements="mx.managers.IFocusManagerContainer"
titleWindow = new TitleWindow();
titleWindow.addElement(popup);
// display pop up title window
PopUpManager.addPopUp(titleWindow, this, false);
}
<fx:Declarations>
<modules:InspectorContainer/>
</fx:Declarations>
显示弹出。弹出窗口是一个标题窗口,其中 InspectorContainer(一个组)作为第一个元素。
在弹出窗口从家庭状态(默认状态)更改为在线状态(当用户单击按钮时会发生这种情况)。在线状态有一个列表。List 有一个 itemrenderer。itemrenderer 有一个复选框。选中复选框。到目前为止,一切都很好。
弹出窗口 (InspectorContainer) 有一个 mx:MenuBar 实例。当您单击菜单栏中的项目时,菜单栏会显示一个菜单项。
单击菜单列表中的项目。调用 itemClick menuHandler。在此函数中,弹出窗口更改状态。
这是发生错误的时候。