apache-flex 如何解决TypeError:错误#1009:从flex 3调用swf时,无法访问空对象引用的属性或方法

xzabzqsa  于 2022-11-01  发布在  Apache
关注(0)|答案(3)|浏览(117)

我是flash的新手。我在Flex中使用SWF加载器调用了这个flash代码。我得到了以下错误。这里我附上了header_text_fla的flash代码。请做必要的工作。
类型错误:错误#1009:无法访问空对象引用的属性或方法。at header_text_弗拉::MainTimeline/loaderComplete()

var myEvent:Event;
var myParams:LoaderInfo;
function loaderComplete(myEvent:Event)
{
if(this.loaderInfo.parameters.text1 != null)
{
Text1.text=this.loaderInfo.parameters.text1 as String;
}
if(this.loaderInfo.parameters.text2 != null)
{
Text2.text=this.loaderInfo.parameters.text2 as String;
}
if(this.loaderInfo.parameters.text3 != null)
{
Text3.text=this.loaderInfo.parameters.text3 as String;
}
}

function useParams()
{

}

var myLoaderInfo=new Object();
myLoaderInfo.myParamsLoaded=false;
myLoaderInfo.loaderComplete=loaderComplete;
myLoaderInfo.useParams=useParams;

this.loaderInfo.addEventListener(Event.COMPLETE, myLoaderInfo.loaderComplete );
oyxsuwqo

oyxsuwqo1#

问题可能是您使用了一个临时对象(myLoaderInfo)函数作为事件处理程序。由于该对象是临时的(或者至少在上面给出的代码中是临时的),并且事件是异步发送的,垃圾收集器可能会在调用函数之前清理myLoaderInfo示例,使其为空,并在调用回调函数时导致错误。
尝试将myLoaderInfo设置为类参数:

var myEvent      : Event;
var myParams     : LoaderInfo;
var myLoaderInfo : Object;//added myLoaderInfo here

function loaderComplete(myEvent:Event)
{
    if(this.loaderInfo.parameters.text1 != null)
    {
        Text1.text=this.loaderInfo.parameters.text1 as String;
    }
    if(this.loaderInfo.parameters.text2 != null)
    {
        Text2.text=this.loaderInfo.parameters.text2 as String;
    }
    if(this.loaderInfo.parameters.text3 != null)
    {
        Text3.text=this.loaderInfo.parameters.text3 as String;
    }
}

function useParams()
{
}

myLoaderInfo = new Object();
myLoaderInfo.myParamsLoaded = false;
myLoaderInfo.loaderComplete = loaderComplete;
myLoaderInfo.useParams      = useParams;

this.loaderInfo.addEventListener(Event.COMPLETE, myLoaderInfo.loaderComplete );

这样,垃圾回收器就不会清理它。

uurv41yg

uurv41yg2#

我已经通过使用try catch解决了这个问题。

try
{
    Text1.text=this.loaderInfo.parameters.text1 as String;
    Text2.text=this.loaderInfo.parameters.text2 as String;
    Text3.text=this.loaderInfo.parameters.text3 as String;
}
catch(error:Error)
{
    trace("Error");
}
ryevplcw

ryevplcw3#

:-)不错的代码。
请填写:

function loaderComplete(myEvent:Event)
{
if (!this.loaderInfo) trace ("no loader info");
if (!this.loaderInfo.parameters) trace ("no loader info parameters");
if (!Text1) trace ("no Text1");
if (!Text2) trace ("no Text2");
if (!Text3) trace ("no Text3");
...
YOUR CODE HERE
...

这将为您提供未初始化的对象,并对引发的错误负责。

相关问题