Как избавиться от нулевой ссылки на объект StyleProtoChain? - PullRequest
0 голосов
/ 30 мая 2009

Вот ошибка:

    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/<a href="http://www.adobe.com/2006/flex/mx/internal::initProtoChain()[C" rel="nofollow noreferrer">http://www.adobe.com/2006/flex/mx/internal::initProtoChain()[C</a>:\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/<a href="http://www.adobe.com/2006/flex/mx/internal::addingChild()[C" rel="nofollow noreferrer">http://www.adobe.com/2006/flex/mx/internal::addingChild()[C</a>:\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/<a href="http://www.adobe.com/2006/flex/mx/internal::childAdded()[C" rel="nofollow noreferrer">http://www.adobe.com/2006/flex/mx/internal::childAdded()[C</a>:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:5267]
        at mx.core::Container/<a href="http://www.adobe.com/2006/flex/mx/internal::childAdded()[C" rel="nofollow noreferrer">http://www.adobe.com/2006/flex/mx/internal::childAdded()[C</a>:\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/<a href="http://www.adobe.com/2006/flex/mx/internal::docFrameHandler()[C" rel="nofollow noreferrer">http://www.adobe.com/2006/flex/mx/internal::docFrameHandler()[C</a>:\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:

    <?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:
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

Может быть, вы могли бы научить меня, как хранить ссылки на нулевые объекты в сложных классах?

Thanx

Dave

1 Ответ

2 голосов
/ 30 мая 2009

Похоже, что ошибка может быть вызвана вызовом метода addChild () в конструкторе вашего класса MessageBoard. Возможно, вы слишком рано вызываете этот метод на раннем этапе жизненного цикла UIComponent. Я бы рекомендовал переопределить метод createChildren () и добавить туда свой дочерний элемент.

override protected function createChildren():void
{
    super.createChildren();
    _messageTitle = new Label();
    _messageTitle.text = "Message Board";
    this.addChildAt(_messageTitle, 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...