2009/09/27

Flex SDK 3.4で遭遇したFocusManagerのバグ

Flex SDK 3.4でビルドするようになってからTabキーでフォーカスを移動した際に、以下のようなエラーが出る事はありませんか?
Flash Playerのデバッグ版でしか表示されないエラーなので、気付いていないかもしれません。
私はTabキーでフォーカスを移動し、画面上のコンポーネントを一周し、defaultButtonに指定したコンポーネントにフォーカスが合わさろうとした際に、このエラーに遭遇しました。
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at mx.managers::FocusManager/focusInHandler()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\managers\FocusManager.as:601] at flash.display::Stage/set focus() at mx.core::UITextField/setFocus()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\core\UITextField.as:1525] at mx.controls::TextInput/setFocus()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\controls\TextInput.as:1832] at mx.managers::FocusManager/setFocus()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\managers\FocusManager.as:553] at mx.managers::FocusManager/setFocusToComponent()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\managers\FocusManager.as:1293] at mx.managers::FocusManager/setFocusToNextObject()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\managers\FocusManager.as:1263] at mx.managers::FocusManager/keyFocusChangeHandler()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\managers\FocusManager.as:1758]
どうやらこれはFlex SDK 3.4のバグで、3.5ではFixされているようです。
バグレポートはこちらにあります(タイトルにはLiveCycleとありますがLiveCycle限定というわけではありません)。
[#SDK-21780] FocusManager RTE in defaultButton scenario. was: Navigating around LiveCycle Workspace results in an ActionScript null pointer error
https://bugs.adobe.com/jira/browse/SDK-21780

バグレポートに合った再現プログラムをシンプルにしたものがこちら。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
    <mx:VBox id="boo" defaultButton="{goo}" >
        <mx:Button id="goo" />
        <mx:Button id="foo" />
    </mx:VBox>
    <mx:VBox id="bee" >
        <mx:Button />
        <mx:Button />
    </mx:VBox>
    <mx:TextInput />
</mx:Application>

バグ回避コードがこちら。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" defaultButton="{goo}" >
    <mx:VBox id="boo">
        <mx:Button id="goo" />
        <mx:Button id="foo" />
    </mx:VBox>
    <mx:VBox id="bee" >
        <mx:Button />
        <mx:Button />
    </mx:VBox>
    <mx:TextInput />
</mx:Application>
defaultButtonの指定位置が変わったことにお気付きでしょうか?
Flex SDK 3.5がリリースされるまでは、このようにして問題を回避できるようですよ。
私の環境ではこの手段で回避できました。
類似の現象に遭遇した方、ご確認ください。

0 件のコメント: