2

それぞれにポップアップ ウィンドウがあるいくつかの ViewStack 状態を呼び出すメイン アプリケーションがあります。ポップアップ ウィンドウを開かなければ、状態間を問題なく移動できます。ポップアップ ウィンドウを開いて状態を変更しようとするとcurrentState=...、次のエラーが表示されます。

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()
at mx.core::UIComponent/setFocus() [E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:9905]
...

他の人が同じ問題を抱えていることがわかります。たとえば、次のようになります。

http://forums.adobe.com/thread/1031531

http://forums.adobe.com/message/2767130

http://forums.adobe.com/message/3448443

http://forums.adobe.com/thread/655749?tstart=-1

http://forums.adobe.com/thread/801149

http://flex4examples.wordpress.com/2011/05/05/skinnabletextbase-focusmanager-runtime-error-popup/

http://bugs.adobe.com/jira/browse/SDK-32036?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel

しかし、推奨されるソリューションを実装する方法がわかりません。含める必要があるように思えます:

import mx.managers.PopUpManager; PopUpManager;

メインアプリケーション内で動作するはずですが、動作しません。

私のアプリケーションには、それぞれを使用して定義された、異なるファイル内の各ビュー ステートがあります<views:View>。また、すべてのポップアップは、.として定義された個別のファイルです<s:TitleWindow>。各ファイルには次の行が含まれます。

import mx.managers.PopUpManager;

これは、各ファイルが異なるポップアップ マネージャー (?) を使用していることを意味するのだろうか (?)、それがシングルトンであり、アプリ全体で 1 つだけを使用する必要がある場合 (設定方法は?)。

ポップアップを呼び出すために使用するコードは次のとおりです。

var _popupName:MyTitleWindowFileName = MyTitleWindowFileName(
    PopUpManager.createPopUp(this, MyTitleWindowFileName, true));   
_popupName.addEventListener(MyAppController.CLOSE_POPUP,onClosePopUp); 
PopUpManager.centerPopUp(_popupName); // call popup 

メイン アプリケーション ( として定義されているアプリケーション<s:Application>) が実行されるとき、ViewStack の状態はまだ読み込まれていないことに注意してください (初めて使用するときに読み込まれるため)。ここに原因/結果があるかどうかはわかりません。

ここの「Sparkポップアップウィンドウとの間でデータをやり取りする」セクションのAdobeのサンプルコードに従ってみました。

http://help.adobe.com/en_US/flex/using/WS6c678f7b363d5da52e8f1ca1124a0430dcf-8000.html#WS6c678f7b363d5da52e8f1ca1124a0430dcf-7ffe

どんなアイデアでも大歓迎です。

4

2 に答える 2

1

あなたのコメントに基づいて、フォーカスがポップアップに残っているためにエラーが発生しているようです。PopUpManagerFocusManagerクラスがこれをより適切に処理することを期待しています。

考えられることの 1 つは、FocusManagerこれを処理しようとしている可能性があるということです。ただし、状態が変化するため、元々 (ビュー スタックの子で、ポップアップが開かれる前に) フォーカスを持っていたアイテムは、ビューの状態が変化したときに存在しなくなる可能性があります。あなたのコードを見ることなく、ただの予感。

問題を回避する (またはより適切に) さらにデバッグして、何が起こっているのかを理解するためにできることを次に示します。

  • FocusManager.setFocus()ポップアップを閉じる前に、ビュー スタックの子のオブジェクトにフォーカスを戻すために使用します。

  • FocusManager.getFocus()さまざまな段階 (ポップアップを開く前、状態を変更する前/後、ポップアップを閉じる前/後) でフォーカスがどこにあると考えられるかをデバッグして確認するために使用します。

于 2012-07-08T20:27:54.950 に答える
0

これは私が経験している状況のようです:

Adobe Air: 異なるアプリケーション間でフォーカスを変更すると、スクローラーがエラーをスローする

アドビのバグです。アドビのソリューションは次のとおりです。

This bug is easily fixed by changing Scroller to do a null pointer check on focusManager before using it.

これは、上記の最初のリンクが試みていることです。

別のリンク: http://forums.adobe.com/message/3812805

于 2012-07-13T17:58:27.257 に答える