ActionScript Drag Drop TypeError: Ошибка № 1009 - PullRequest
0 голосов
/ 10 сентября 2011

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

TypeError: Ошибка № 1009: null. в mx.controls.listClasses :: ListBase / hideDropFeedback () [E: \ dev \ 4.5.1 \ frameworks \ projects \ mx \ src \ mx \ controls \ listClasses \ ListBase.as: 8619] в mx.controls :: Tree / dragDropHandler () [E: \ dev \ 4.5.1 \ frameworks \ projects \ mx \ src \ mx \ controls \ Tree.as: 3328] на flash.events::EventDispatcher/dispatchEventFunction () на flash.events::EventDispatcher/dispatchEvent () в mx.core :: UIComponent / dispatchEvent () [E: \ dev \ 4.5.1 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 13128] в mx.managers.dragClasses :: DragProxy / _dispatchDragEvent () [E: \ dev \ 4.5.1 \ frameworks \ projects \ framework \ src \ mx \ Manager \ dragClasses \ DragProxy.as: 374] в mx.managers.dragClasses :: DragProxy / mouseUpHandler () [E: \ dev \ 4.5.1 \ frameworks \ projects \ framework \ src \ mx \ Manager \ dragClasses \ DragProxy.as: 599]

Исключение происходит, когда я начинаю перетаскивать узел (по крайней мере, на один или два пикселя). У меня есть эта инициализация, и после этого я программно добавляю детей

      eventsTree.dragEnabled=true;
        eventsTree.dropEnabled=true;
        eventsTree.dragMoveEnabled=true;
        eventsTree.addEventListener(ListEvent.ITEM_DOUBLE_CLICK, itemDoubleClickHandle
        eventsTree.addEventListener(DragEvent.DRAG_DROP, dragDropHandler); 
        eventsTree.addEventListener(ListEvent.ITEM_CLICK,itemClickListener)
        loadTreeContents();

1 Ответ

2 голосов
/ 11 сентября 2011

Объект с нулевым значением не может иметь свойств. Эта ошибка может возникнуть в некоторых неожиданных (хотя и допустимых) ситуациях. Например, рассмотрим следующий код, который создает объект Sprite. Поскольку этот объект Sprite никогда не добавляется в список отображения (с помощью метода addChild () объекта DisplayObjectContainer), его свойство stage имеет значение null, и поэтому его свойство stage не может иметь никаких свойств. Таким образом, код генерирует ошибку: import flash.display.Sprite;

var sprite1: Sprite = новый Sprite (); var q: String = sprite1.stage.quality;

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

  • Убедитесь, что скрипт запущен после загрузки объекта или достижения кадра в анимации.
  • Проверьте таргетинг

Возможно, реорганизовать код для этого?

    eventsTree.addEventListener(ListEvent.ITEM_DOUBLE_CLICK, itemDoubleClickHandle); 
    eventsTree.addEventListener(DragEvent.DRAG_DROP, dragDropHandler);  
    eventsTree.addEventListener(ListEvent.ITEM_CLICK,itemClickListener);
    eventsTree.dragEnabled=true; 
    eventsTree.dropEnabled=true; 
    eventsTree.dragMoveEnabled=true; 
    loadTreeContents(); 

Надеюсь, это поможет вам.

P.S запомните точки с запятой и закройте скобки.

Рекомендации:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/runtimeErrors.html

http://curtismorley.com/2007/08/15/flash-cs3-flex-error-1009-cannot-access-a-property-or-method-of-a-null-object-reference/

...