2009-05-29 23 views
0

は誤りである:ここではnull StyleProtoChainオブジェクト参照を取り除くにはどうすればよいですか?ここ

 
    TypeError: Error #1009: Cannot access a property or method of a null object reference. 
     at mx.styles::StyleProtoChain$/initProtoChainForUIComponentStyleName()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\styles\StyleProtoChain.as:72] 
     at mx.core::UIComponent/ http://www.adobe.com/2006/flex/mx/internal::initProtoChain()[C :\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:7469] 
     at mx.core::UIComponent/regenerateStyleCache()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:7690] 
     at mx.core::UIComponent/ http://www.adobe.com/2006/flex/mx/internal::addingChild()[C :\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:5239] 
     at mx.core::UIComponent/addChild()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:4955] 
     at mx.controls.listClasses::ListBase/createChildren()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\controls\listClasses\ListBase.as:3103] 
     at mx.core::UIComponent/initialize()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:5370] 
     at mx.core::UIComponent/ http://www.adobe.com/2006/flex/mx/internal::childAdded()[C :\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:5267] 
     at mx.core::Container/ http://www.adobe.com/2006/flex/mx/internal::childAdded()[C :\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:3305] 
     at mx.core::Container/addChildAt()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:2217] 
     at mx.core::Container/addChild()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:2140] 
     at model::MessageBoard()[C:\Documents and Settings\dbabbitt\My Documents\Flex Builder 3\ListExample\src\model\MessageBoard.as:56] 
     at model::MessageBoard$cinit() 
     at global$init()[C:\Documents and Settings\dbabbitt\My Documents\Flex Builder 3\ListExample\src\model\MessageBoard.as:7] 
     at main()[C:\Documents and Settings\dbabbitt\My Documents\Flex Builder 3\ListExample\src\main.mxml:56] 
     at _main_mx_managers_SystemManager/create() 
     at mx.managers::SystemManager/initializeTopLevelWindow()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\managers\SystemManager.as:3188] 
     at mx.managers::SystemManager/ http://www.adobe.com/2006/flex/mx/internal::docFrameHandler()[C :\autobuild\3.2.0\frameworks\projects\framework\src\mx\managers\SystemManager.as:3064] 
     at mx.managers::SystemManager/docFrameListener()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\managers\SystemManager.as:2916]

はmain.mxmlです:あなたは、複雑なクラスのうち、nullオブジェクト参照を維持する方法で学校に私を多分

package model { 
    import mx.containers.VBox; 
    import mx.controls.Label; 

    [Bindable] 
    public class MessageBoard extends VBox { 

     /** The message list title. */ 
     private var _messageTitle:Label; 

     /** The maximum message count. */ 
     private var _maxMessageCount:int = 4; 

     /** Storage for the singleton instance. */ 
     private static const _instance:MessageBoard = new MessageBoard(SingletonLock); 

     /** Provides singleton access to the instance. */ 
     public static function get instance():MessageBoard { 
      return _instance; 
     } 

     /** 
     * Constructor 
     * 
     * @param lock The Singleton lock class to pevent outside instantiation. 
     */ 
     public function MessageBoard(lock:Class) { 
      super(); 

      // Verify that the lock is the correct class reference. 
      if (lock != SingletonLock) { 
       throw new Error("Invalid Singleton access. Use MessageBoard.instance."); 
      } 

      _messageTitle = new Label(); 
      _messageTitle.text = "Message Board"; 
      this.addChild(_messageTitle); 
     } 

    } // end class 
} // end package 

class SingletonLock { 
} // end class 

ことができます:ここで

 
    <?xml version="1.0"?> 
    <mx:Application 
     xmlns:mx="http://www.adobe.com/2006/mxml" 
    > 
     <mx:Script> 
      <![CDATA[ 
       import model.MessageBoard; 
       public var _messageBoard:MessageBoard = MessageBoard.instance; 
      ]]> 
     </mx:Script> 
    </mx:Application> 
はMessageBoard.asありますか?

ありがとう

デイブ

答えて

2

エラーがあなたのメッセージボードクラスのコンストラクタではaddChild()メソッドの呼び出しから来るすることができるように見えます。このメソッドをUIComponentのライフサイクルの早い時期に呼び出すことができます。 createChildren()メソッドをオーバーライドし、そこに子要素を追加することをお勧めします。

override protected function createChildren():void 
{ 
    super.createChildren(); 
    _messageTitle = new Label(); 
    _messageTitle.text = "Message Board"; 
    this.addChildAt(_messageTitle, 0); 
} 
+0

あなたが話していることを実証できますか? –

+0

コードサンプルが追加されました。 –

+0

"this.addChild"セクションをcreateChildrenメソッドにプッシュする必要があるので、今や、複合オブジェクトを作成する方法を理解していると思います。他の.addChildセクションがある場合は、プロセスが繰り返される独自のクラスに移動する必要があります。 –

関連する問題