再次重新加载SWF会出错

时间:2011-05-12 15:27:38

标签: flash actionscript-3 actionscript flash-cs5

我在重装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.

我无法解决为什么第二次加载而不是第一次加载的原因。它应该是一样的? 这是在Windows Projector .exe文件中完成的,它将作为kiosk应用程序运行。

编辑:

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 个答案:

答案 0 :(得分:1)

尝试向loader.contentLoaderInfo添加完整的事件侦听器,并在事件侦听器处理程序中执行loader.load下面的所有内容(如addChild(introSWF);)。即使不是必需的,它也可以帮助您防止尝试使用尚未加载的对象的情况。

答案 1 :(得分:0)

Ben - 这个错误还有第二行吗?它可能会告诉您错误是由“RegionalIntro.swf”抛出的,而不是您的包装swf。

SWF可能会发生与时间相关的事情。换句话说 - 它可能会利用一些需要在被调用之前加载/初始化的资产,有时它还没有准备好。