Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.03.2010, 10:13
KIVagant вне форума Посмотреть профиль Отправить личное сообщение для KIVagant Найти все сообщения от KIVagant
  № 1  
Ответить с цитированием
KIVagant

Регистрация: May 2009
Сообщений: 34
По умолчанию 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 подряд. Как быть? Вроде бы тут ничего сверхестественного не делаю, откуда такое странное поведение флеша?

Старый 01.03.2010, 10:28
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 2  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
вызываешь
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); 
}
Но как ты собираешся достукиваться до датыгрид извне?
__________________
Отряд Котовскага

Старый 01.03.2010, 10:35
KIVagant вне форума Посмотреть профиль Отправить личное сообщение для KIVagant Найти все сообщения от KIVagant
  № 3  
Ответить с цитированием
KIVagant

Регистрация: May 2009
Сообщений: 34
Котяра, я привел упрощенный класс. 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
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 4  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
я писал, что
Цитата:
вызываешь
initDataGrid()
до того как DataGridInit добавлен на сцену. .т.е. надо сначала addChild(DataGridInit) а потом у него вызвать initDataGrid()..
stage еще не определён (==null) в этот момент. на что какбе и намекает ошибка № 1009
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 01.03.2010 в 10:39.
Старый 01.03.2010, 10:51
KIVagant вне форума Посмотреть профиль Отправить личное сообщение для KIVagant Найти все сообщения от KIVagant
  № 5  
Ответить с цитированием
KIVagant

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

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

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

Старый 01.03.2010, 11:26
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
потрэйсь стэйджвсё-таки..
и сделай в конструкторе
Код AS3:
if (stage) initDataGrid();
			else addEventListener(Event.ADDED_TO_STAGE,initDataGrid);
__________________
Отряд Котовскага

Старый 01.03.2010, 22:39
KIVagant вне форума Посмотреть профиль Отправить личное сообщение для KIVagant Найти все сообщения от KIVagant
  № 7  
Ответить с цитированием
KIVagant

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

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
datagrid , Ошибка #1009
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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