Перезагрузка SWF во второй раз получает ошибку - PullRequest
0 голосов
/ 12 мая 2011

У меня странная проблема с перезагрузкой SWFS. Я начинаю с загрузки моего SWF:

var req:URLRequest = new URLRequest( "RegionalIntro.swf" ); 
req.method = URLRequestMethod.POST; 
req.data = true; // POST requests require non-null data 

introSWF = new Loader();
introSWF.load(req);
addChild(introSWF);

Затем, когда я закончу, я выгружаю:

removeChild(introSWF);
introSWF.unloadAndStop(true);

Теперь, когда я хочу перезагрузить SWF, я снова запускаю первый бит кода и получаю эту ошибку:

TypeError: Error #1009: Cannot access a property or method of a null object reference.

Я не могу понять, почему я получаю это во второй раз, а не первый. Это должно быть просто так же? Это делается внутри .exe-файла Windows Projector, он будет работать как приложение киоска.

EDIT:

at com.company.THPassport.exRegional::exRegionalIntro/skipTablet()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.company.THPassport.exRegional::exRegionalLoader/userLoaded()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.company.THPassport.utilities.DB::user/loadUserData()
at com.company.THPassport.utilities.DB::user/checkExistingUserLoadedXML()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()

Насколько я вижу, здесь появляется ошибка:

currentUser = e.data;

maxspeechB.parent.removeChild(maxspeechB);
maxspeechA.parent.removeChild(maxspeechA);
wallstageA.parent.removeChild(wallstageA);
tabletfalls.parent.removeChild(tabletfalls);
tabletvanishes.parent.removeChild(tabletvanishes);

wallfills.alpha = 0;
    if (currentUser.getCompleteAreas() == 1) {
        wallfills.gotoAndStop(40);
    } else if (currentUser.getCompleteAreas() == 2) {
        wallfills.gotoAndStop(80);
    } else if (currentUser.getCompleteAreas() == 3) {
        wallfills.gotoAndStop(120);
    }
wallstageB.alpha = 1;
Tweener.addTween(wallfills,{  alpha:1, time:1, transition:  "linear", onComplete:dropSignpost});

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

EDIT2: график утолщается, я могу уловить ошибку, окружив весь код функции в верхней части трассировки стека блоком try / catch. Я прослеживаю ошибку, и она такая же, странная вещь - весь код выполняется так, как ожидалось. Все работает нормально и выдает ошибку ... очень странно! Я бы не хотел оставлять это так, не выясняя, почему он это делает ...

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Попробуйте добавить полный прослушиватель событий к loader.contentLoaderInfo и сделайте все ниже loader.load (например, addChild(introSWF);) в обработчике прослушивателей событий.Даже если это не требуется, это поможет вам предотвратить ситуацию, в которой вы пытаетесь использовать объект, который еще не загружен.

0 голосов
/ 12 мая 2011

Бен - есть ли вторая строка этой ошибки?Это может сказать вам, что ошибка генерируется "RegionalIntro.swf", а не вашим SWF-файлом оболочки.

Возможно, что-то происходит в том SWF, который связан с синхронизацией.Другими словами - он может использовать некоторый ресурс, который должен быть загружен / инициализирован перед вызовом, а иногда он еще не готов.

...