Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Error #1009 при работе с DataGrid (http://www.flasher.ru/forum/showthread.php?t=136934)

KIVagant 01.03.2010 10:13

Error #1009 при работе с DataGrid
 
Здравствуйте.

Помогите, пожалуйста. В простейшем участке кода получаю странные ошибки.

ActionScript 3, Adobe Flash CS4.

Код AS3:

package
{
        import fl.controls.DataGrid;
        class DataGridInit extends MovieClip
        {
                private static function initDataGrid()
                {
                        var data_grid:DataGrid = new DataGrid();
                        trace(data_grid) //Сообщает, что объект типа DataGrid, все ок
                        stage.addChild(data_grid); // А вот тут сразу же получаю ошибки
                }
        }
}

В дебаг-флеш клиенте получаю ошибки вида:

Код:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
        at fl.containers::BaseScrollPane/drawBackground()
        at fl.controls::DataGrid/draw()
        at fl.core::UIComponent/callLaterDispatcher()

Код:

TypeError: Error #2007: Параметр child не должен быть равен нулю.
        at flash.display::DisplayObjectContainer/addChildAt()
        at fl.controls::BaseButton/drawBackground()
        at fl.controls::BaseButton/draw()
        at fl.core::UIComponent/drawNow()
        at fl.controls::ScrollBar/draw()
        at fl.core::UIComponent/callLaterDispatcher()

И так далее - штук 10 подряд. Как быть? :eek: Вроде бы тут ничего сверхестественного не делаю, откуда такое странное поведение флеша?

Котяра 01.03.2010 10:28

вызываешь
initDataGrid()
до того как DataGridInit добавлен на сцену. .т.е. надо сначала addChild(DataGridInit) а потом у него вызвать initDataGrid()..
и вообще очень странный класс.
private static function - не работает с данными экземпляра, а stage - это данные экземпляра.
передавай stage в качестве параметра ф-ции
Код AS3:

private static function initDataGrid($stage:DisplayObjectContainer)
{
                        var data_grid:DataGrid = new DataGrid();
                        $stage.addChild(data_grid);
}

Но как ты собираешся достукиваться до датыгрид извне?

KIVagant 01.03.2010 10:35

Котяра, я привел упрощенный класс. static там действительно не нужен, это я просто ошибся при копировании, пока упрощал код. Извиняюсь, если запутал.
Покажу более правильный код, в котором по прежнему вижу эти ошибки:
Код AS3:

 
package
{
        import fl.controls.DataGrid;
        class DataGridInit extends MovieClip
        {
                private function DataGridInit():void
                {
                        var data_grid:DataGrid = new DataGrid();
                        trace(data_grid) //Сообщает, что объект типа DataGrid, все ок
                        stage.addChild(data_grid); // А вот тут сразу же получаю ошибки
                }
        }
}


Котяра 01.03.2010 10:37

я писал, что
Цитата:

вызываешь
initDataGrid()
до того как DataGridInit добавлен на сцену. .т.е. надо сначала addChild(DataGridInit) а потом у него вызвать initDataGrid()..
stage еще не определён (==null) в этот момент. на что какбе и намекает ошибка № 1009

KIVagant 01.03.2010 10:51

Котяра, это базовый класс. Самый первый, который вызывается флешем. Он прописан в свойствах сцены. Его не нужно добавлять. У него есть stage, и это рабочий класс - у меня там игра работает без проблем. Я специально у себя закомментировал абсолютно всё, оставил только добавление Datagrid - и получаю ошибки. Даже со сцены все объекты удалил — результат тот же.

При чем это наблюдается похоже именно в конкретном .fla-файле, который в общем-то мне и нужен.

Я взял рабочий пример, скопировал код напрямую в "Actions - frame", минуя классы.
В одном fla-файле работает, в другом сыпет ошибками. Перезапуск Flash CS4 не помогает. Уже не знаю, куда и думать.

Котяра 01.03.2010 11:26

потрэйсь стэйджвсё-таки..
и сделай в конструкторе
Код AS3:

if (stage) initDataGrid();
                        else addEventListener(Event.ADDED_TO_STAGE,initDataGrid);


KIVagant 01.03.2010 22:39

Всё, проблема найдена. Нужно было в сцену добавить компонент Datagrid и настроить там (при желании) скин, я этого не знал.

Котяра, спасибо за помощь.


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

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