Исключение выдается из StaticPropertyWatcher.as - PullRequest
1 голос
/ 23 сентября 2011

Недавно я неожиданно начал получать текущее исключение из библиотеки Flex. Файл, над которым я работал (Login.mxml), неожиданно начал вызывать это исключение при загрузке.

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at mx.binding::StaticPropertyWatcher/updateParent()[E:\dev\4.x\frameworks\projects\framework\src\mx\binding\StaticPropertyWatcher.as:150]
    at _components_LoginWatcherSetupUtil/setup()
    at components::Login()[C:\Users\username\Documents\MP_MAIN\src\components\Login.mxml:0]
    <snip ...>
    at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:700]
    at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1072]

Запуск его в отладчике не дает мне строку моего кода с ошибкой, но дает мне строку в StaticPropertyWatcher. В частности:

override public function updateParent(parent:Object):void
{
    // The assumption is that parent is of type, Class, and that
    // the class has a static variable or property,
    // staticEventDispatcher, of type IEventDispatcher.
    parentObj = Class(parent);

    if (parentObj["staticEventDispatcher"] != null) /* Exception thrown from here */
    {
    ...

Отладчик показывает, что parentObj действительно нулевой, объясняя непосредственную причину исключения, но я не могу определить более глубокую причину (то есть, что я сделал не так). Метод updateParent вызывается из класса _components_LoginWatcherSetupUtil, но отладчик говорит, что для этого нет кода, поэтому отсутствует критическая связь между тем, что я написал, и тем, что вызвало исключение.

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

Ответы [ 2 ]

0 голосов
/ 23 сентября 2011

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

public static var MAIN:String = "http://192.168.1.1/";
public static var MANAGE:String = MAIN + "Manage/";

Проблема заключалась в том, что для инициализации MANAGE я использовал постоянную времени без компиляции MAIN.Изменение этих переменных на const устранило проблему.

public static const MAIN:String = "http://192.168.1.1/";
public static const MANAGE:String = MAIN + "Manage/";

Надеюсь, это поможет всем, кто столкнется с этой проблемой

0 голосов
/ 23 сентября 2011

Ваша ошибка сообщается как Login.mxml: 0
Когда я вижу строку 0 как ошибку, она говорит мне, что есть какая-то синтаксическая ошибка. Может быть, открытая строка?
Я бы посоветовал посмотреть на файл и посмотреть, правильно ли он настроен.

Разместите полный файл Login.mxml и давайте посмотрим на него.

...