Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ошибка обращения к объекту со ссылкой null, обращаюсь после срабатывания FRAME_CONSTR (http://www.flasher.ru/forum/showthread.php?t=138246)

mrMEM 02.04.2010 17:20

ошибка обращения к объекту со ссылкой null, обращаюсь после срабатывания FRAME_CONSTR
 
вот код программы

Код AS3:

                public function ContactPage() {
                        sc = new ServerComunication();
                        addEventListener(Event.ENTER_FRAME, onEnterFrame);
                }
                private function onEnterFrame(e:Event) {
                        if (currentLabel == "finished") {
                                addEventListener(Event.FRAME_CONSTRUCTED, onFrameConstructed);
                                function onFrameConstructed(e:Event){
                                        trace("onFrameConstructed");
                                        sendBTN.addEventListener(MouseEvent.CLICK, sendBTNClicked);
                                        //<вырезано> появляется энтер
                                        inputCommentTxt.text = "";
 
                                        // подгрузим контактные данные
                                        xmlLoader = new URLLoader();
                                        xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
                                        try {
                                                xmlLoader.load(new URLRequest("Contacts/info.xml"));
                                        } catch (error:Error) {
                                                trace("Unable to load requested document.");
                                        }
                                        removeEventListener(Event.FRAME_CONSTRUCTED, onFrameConstructed);
                                }
 
                                removeEventListener(Event.ENTER_FRAME, onEnterFrame);
                        }
                }

trace("onFrameConstructed") срабатывает дважды,
после чего выдает ошибку на строчке sendBTN.addEventListener(MouseEvent.CLICK, sendBTNClicked)
sendBTN создается на кадре "finished"

не понимаю пчему возникает ошибка? и почему-то

вот текст ошибки:
Код:

onFrameConstructed
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
        at ContactPage/private:onEnterFrame/onFrameConstructed()[C:\WebServers\home\test.ru\www\ContactPage.as:50]
onFrameConstructed


КорДум 02.04.2010 19:54

Попробуйте onFrameConstructed вынести за пределы onEnterFrame

wvxvw 02.04.2010 21:19

Не выражайтесь. И не используйте вложеные функции.

POzONe 03.04.2010 14:39

у меня та же самая ошибка на такую же конструкцию. Сижу и парюсь.:(

Добавлено через 1 час 50 минут
Я нашёл, почему у меня не работало. Экземпляр класса в момент привязки к нему Listener'а должен быть уже на сцене.

mrMEM 05.04.2010 16:07

изменил код, избавился от onEnterFrame

Код AS3:

                public function ContactPage() {
                        sc = new ServerComunication();
                        addEventListener(Event.FRAME_CONSTRUCTED, onFrameConstructed);
                }
                private function onFrameConstructed(e:Event){
                        trace("onFrameConstructed "+currentFrame);
                        if (currentLabel == "finished") {
                                // sendBTN:Button
                                sendBTN.addEventListener(MouseEvent.CLICK, sendBTNClicked);
 
                                // х.з. но без этой херни появляется энтер
                                inputCommentTxt.text = "";
 
                                // подгрузим контактные данные
                                xmlLoader = new URLLoader();
                                xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
                                try {
                                        xmlLoader.load(new URLRequest("Contacts/info.xml"));
                                } catch (error:Error) {
                                        trace("Unable to load requested document.");
                                }
                                removeEventListener(Event.FRAME_CONSTRUCTED, onFrameConstructed);
                        }
                }

ошибка та же.

смотрите, вот выводы:
Код:

onFrameConstructed 1
onFrameConstructed 2
onFrameConstructed 3
onFrameConstructed 4
onFrameConstructed 5
onFrameConstructed 6
onFrameConstructed 7
onFrameConstructed 8
onFrameConstructed 9
onFrameConstructed 10
onFrameConstructed 11
onFrameConstructed 12
onFrameConstructed 12
onFrameConstructed 13
onFrameConstructed 14
onFrameConstructed 15
onFrameConstructed 16
onFrameConstructed 17
onFrameConstructed 18
onFrameConstructed 19
onFrameConstructed 20
onFrameConstructed 21
onFrameConstructed 22
onFrameConstructed 23
onFrameConstructed 24
onFrameConstructed 25
onFrameConstructed 26
onFrameConstructed 27
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
        at ContactPage/onFrameConstructed()[C:\WebServers\home\test.ru\www\ContactPage.as:49]
onFrameConstructed 27
XML Loaded
finished

"onFrameConstructed 27" выводится дважды, это тот самый кадр с лэйблом finished.
кроме того стоит заметить, что код после if (currentLabel == "finished") полностью выполняется, но до сих пор выводится та же ошибка..

еще вычитал в хэлпе: "..Это многоадресное событие, которое отправляется всеми экранными объектами, для которых зарегистрированы прослушиватели данного события."
не совсем догоняю смысл, у меня на этом кадре дорисовывается анимация + добовляется 8 объектов, кому интересно можете посмотреть сайт на http://dance.reditstudio.ru/ страница "контакты"(очень даже красиво получается). внимание вопрос, почему событие на 27-м кадре вызывается дважды?

Добавлено через 11 минут
еще когда я перемещаю удаление события наверх, т.е. сразу после if:
Код AS3:

                        if (currentLabel == "finished") {
                                removeEventListener(Event.FRAME_CONSTRUCTED, onFrameConstructed);

onFrameConstructed 27 возникает один раз, ошибка так же возникает и код после нее не выполняется
сам отвечу на свой вопрос. на 27-м кадре в скриптах написано stop(). FRAME_CONSTRUCTED на 27-м кадре вызывается дважды, согласно плану выполнения, и будет возникать до тех пор пока не будет удален прослушиватель.

меня принципиально заинтересовал вопрос, зачем тогда нужен FRAME_CONSTRUCTED, если объекты на сцене в момент его вызова еще не появились?!

mrMEM 09.04.2010 19:30

вылечил,
но вопрос еще актуален


Часовой пояс GMT +4, время: 12:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.