Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема при создании Button (http://www.flasher.ru/forum/showthread.php?t=116284)

alekson 25.09.2008 12:58

Проблема при создании Button
 
Код:

        private function setupButtons():void {
            b1 = new Button();

            b1.width = 160;

            b1.move(10,10);

            b1.label = "Default Button";

         
            b1.addEventListener(MouseEvent.CLICK, buttonClick);
                       
                        trace(b1);

            parentObject.addChild(b1);
        }

trace
Код:

[object Button]
TypeError: Error #2007: Parameter child must be non-null.
        at flash.display::DisplayObjectContainer/addChildAt()
        at fl.controls::BaseButton/fl.controls:BaseButton::drawBackground()
        at fl.controls::LabelButton/fl.controls:LabelButton::draw()
        at fl.controls::Button/fl.controls:Button::draw()
        at fl.core::UIComponent/::callLaterDispatcher()

почему null то?

BlooDHounD 25.09.2008 13:42

посмотрите в какой функции вам пишется ошибка, а какой функции вы привили код.

kackbip 25.09.2008 13:49

Вы забыли компонентик в библиотечку перетащить :)

Цитата:

Сообщение от BlooDHounD (Сообщение 766300)
посмотрите в какой функции вам пишется ошибка, а какой функции вы привили код.

Он привел все как есть. Ваши "подсказки" абсолютно бесполезны и говорят о том, что вы не успеваете подумать перед написанием коментария.

iNils 25.09.2008 14:03

kackbip, мультипостинг запрещен, пользуйтесь кнопкой изменить.

BlooDHounD 25.09.2008 14:36

kackbip, наверно Вы правы. код приведён для метода setupButtons, а ошибка происходит в стэке, где этот метод даже не упоминается. я дурак, простите :(

kackbip 25.09.2008 14:53

Ну что вы. Такое признание... На это способны только самые умные люди, извините Вы меня за невежливое замечание.

terbooter 25.09.2008 14:55

Вложений: 1
BlooDHounD, просто признайтесь что поторопились и ошиблись.
Вот код документ класса
Код:

package  {
        import fl.controls.Button;
        import flash.display.Sprite;
       

        public class  Test extends Sprite{
               
                public function Test() {
                        trace("Test");
                        var button:Button = new Button();
                        this.addChild(button);
                       
                }
               
        }
       
}

Который дает ошибку
Цитата:

TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/drawBackground()
at fl.controls::LabelButton/draw()
at fl.controls::Button/draw()
at fl.core::UIComponent/callLaterDispatcher()

s8000_1 25.09.2008 16:54

alekson, перетащите компонент в библиотеку из меню компонент, как посоветовал kackbip

BlooDHounD 25.09.2008 17:22

ну что я могу сказать ещё :) я ошибся.
но при этом повторю своё мнение: ошибка не там. ошибка в самом компоненте. в ошибке не сказано "не хватает классов для отрисовки скина". в ошибке явно говорится, что куда-то пихают null.

terbooter, ваши исходники вывели следущие ошибки ещё на компиляции:
Код:

1172: Definition fl.controls:Button could not be found.
1046: Type was not found or was not a compile-time constant: Button.
1180: Call to a possibly undefined method Button.


kackbip 25.09.2008 17:50

это потому что нужно прописать путь до компонентских сорцов в Public Settings -> Flash -> Settings и там добавить путь .. у меня такой вот:
C:\Program Files\Adobe\Adobe Flash CS3\en\Configuration\Component Source\ActionScript 3.0\User Interface

BlooDHounD 25.09.2008 18:17

ого, а зачем мне это прописывать? если я перетаскиваю компонент, то у меня всё компилится нормально. тоесть это заплатка, для того, чтобы вывелась ошибка, которая ни при каких других обстоятельствах не возникает?

kackbip 26.09.2008 05:38

Чтобы создать Button динамически нужно сделать импорт fl.controls.Button, а fl.controls.Button по умолчанию ищется в папке, где находится ваша флэшка. И не находит. Потому нужно прописать дополнительный путь, где лежат исходники. После того как вы его прописываете компилятор ищет fl.controls.Button не только в папке, где находится флэшка, но еще и по тому адресу, который вы написали.

Если не нужно динамическое создание компонента, и вы явно не пользуетесь конструктором класса компонента, то его можно не импортить. Несмотря на это, все его методы и свойства будут доступны.

BlooDHounD 26.09.2008 11:49

kackbip, как ни странно, я повторю, что ничего не прописывал. просто если компонент валяется в библиотеке, то не выдаётся ни одной ошибки. даже если я удаляю все ассеты. но стоит мне удалить компонент из библиотеке, получаем в результате ошибки о том, что класс нЭту буттона. как добиться той ошибки про которую Вы говорите?

kackbip 26.09.2008 13:19

Цитата:

Сообщение от BlooDHounD (Сообщение 766358)
terbooter, ваши исходники вывели следущие ошибки ещё на компиляции:
Код:

1172: Definition fl.controls:Button could not be found.
1046: Type was not found or was not a compile-time constant: Button.
1180: Call to a possibly undefined method Button.


Вы отлично справились с получением ошибки.
Теперь прописываем адрес, как я говорил, либо копируем папочку fl с классами компонентов в нашу папочку и ошибка исчезает. Но появляется другая, та которую описал создатель темы.

У вас там etc рядом сидит? Он может рассказать вам по этому поводу лучше. Ведь он вроде гуру.

BlooDHounD 26.09.2008 13:52

kackbip, да не хочу я копировать ничего. и никуда прописывать тоже. зачем мне это надо делать? что бы у меня вывелась эта ошибка? у меня без без этого всё работает, ровно так как должно работать. делать какие-то хаки чтобы, получить ошибку, мне не хочется.

Денис, всегда рядом. он мой ангел хранитель!

AlexsWulf 12.10.2009 11:56

Верну тему к жизни :)
Есть код
Код AS3:

              private function addButN():void
                {
                        var But_N : Button = new Button();
                        But_N.y= + 50;
                        But_N.x= + 50;
                        But_N.label="Нет";
                        But_N.emphasized = true;
                        But_N.addEventListener(MouseEvent.CLICK, clickN_listener);
                        addChild(But_N);
                }

Изначально компилятор выдавал ошибку как и у автора темы.
После добавления компонента в библиотеку компилятор выдал
Код:

**Warning** The linkage identifier 'fl.core.ComponentShim' was already assigned to the symbol 'buttons/Component Assets/_private/ComponentShim', and cannot be assigned to the symbol 'window/Component Assets/_private/ComponentShim', since linkage identifiers must be unique.
**Warning** The linkage identifier 'focusRectSkin' was already assigned to the symbol 'buttons/Component Assets/Shared/focusRectSkin', and cannot be assigned to the symbol 'window/Component Assets/Shared/focusRectSkin', since linkage identifiers must be unique.

Подскажите что я на ворочал такого?

etc 12.10.2009 12:34

Переведите текст ошибки.

AlexsWulf 12.10.2009 13:00

Да у меня с англицким проблема. А переводчик какую то туфту выдает.


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

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