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を作成し、それにモジュールを追加して表示しました。モジュールにはいくつかの状態があり、各状態にはグループがあり、1つのグループにはリストがあり、そのリストにはItemRendererがあり、ItemRendererにはチェックボックスがあります。
モジュールにはメニューもあります。メニューを開くと、メニューポップアップにモジュールが使用可能な状態が一覧表示されます。メニューポップアップから項目を選択すると、別の状態に変わります。
状態が変更され、最後の項目がチェックボックスの場合、エラーが生成されます。少なくともそれが起こっていると私は思います。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(グループ)を含むタイトルウィンドウです。
ポップアップで、ホーム状態(デフォルト状態)からオンライン状態に変更します(これは、ユーザーがボタンをクリックしたときに発生します)。オンライン状態にはリストがあります。リストにはアイテムレンダラーがあります。itemrendererにはチェックボックスがあります。チェックボックスを選択します。ここまでは順調ですね。
ポップアップ(InspectorContainer)にはmx:MenuBarインスタンスがあります。メニューバーの項目をクリックすると、メニューバーにメニュー項目が表示されます。
メニューリストの項目をクリックします。itemClickmenuHandlerが呼び出されます。この関数では、ポップアップの状態が変わります。
これは、エラーが発生したときです。