2011-07-29 17 views
0

我是flash新手。我使用SWF加載器在Flex中調用了此Flash代碼。我得到以下錯誤。在這裏,我已經附加了flash_for_ header_text_fla的編碼請做好必要的工作。如何解決TypeError:錯誤#1009:從flex調用swf時無法訪問空對象引用的屬性或方法3

TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法。 在header_text_fla :: 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); 
+0

代碼非常混亂。您正在使用對'myLoaderInfo'以及'loaderInfo'的引用。底部的六行代碼似乎並沒有封裝在任何東西中,這讓我感到困惑。雖然變量聲明可以接受而不是封裝在一個函數中,但屬性設置器和事件註冊器註冊不應該像那樣封裝。 –

+0

你能給我們一個調試器說的責任?有很多你在這裏訪問的東西會拋出這個,而這可能甚至不是代碼的責任。這就是爲什麼編譯器/調試器給出一個行參考或至少是錯誤發生位置的塊引用。 – 2011-07-29 14:56:05

+0

這個我用來從flex獲得flashvars數據並在swf中使用 – James

回答

1

我以嘗試解決catch.Here的代碼是

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"); 
} 
+0

錯誤顯示是什麼? –

+0

TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法 – James

0

:-)尼斯代碼。

請寫:

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 
... 

這會給你未初始化並負責拋出錯誤的對象。

+0

沒有變化沒有得到任何消息.......... :( – James

0

可能是問題是您正在使用臨時對象的(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); 

這樣一來,垃圾收集器將不會清理。

+0

沒有影響代碼........ .. :( – James

相關問題