2011-08-05 65 views
1

我將TextField實例稱爲inputWord,它在第一幀中不包含任何文本。在同一幀,動作層,當我提到inputWord以任何方式任何時間,有一個錯誤:AS3中的錯誤1009

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
at DC/frame1()[DC::frame1:19] //DC is the name of document class that I created. 
at flash.display::MovieClip/gotoAndStop() 
at DC()[C:\Users\nikkka\Desktop\flash\DC.as:25] 

19是我的代碼,涉及inputWord所在行的行號。它的工作原理,我的意思是我寫 inputWord.text =「smth」

它的文字變成了「smth」,但有同樣的錯誤。爲什麼?

+0

是否已進行了確認組件已被呈現? – Kevin

+0

那是怎麼回事? ; O – nicks

+0

太糟糕了,你正在使用Flash而不是Flex。在Flex中,您可以偵聽CREATION_COMPLETE事件,但由於您使用的是Flashm,因此您可以使用Timer類或setTimeout(..)函數來檢查組件是否稍後渲染。 – Kevin

回答

2

問題是與gotoAndStop()

在AS2

,當你做一個gotoAndStop您可以訪問的資源在框架右正如Kevin所指出的那樣,首先需要渲染框架

要做到這一點,當渲染框架來處理框架相關邏輯時,需要使用onrender偵聽器。然後你需要使舞臺無效,強制渲染。

像這樣:

stage.addEventListener(Event.RENDER, onRenderStage); 
protected function onRenderStage(ev:Event):void { 
    inputWord.text = "smth" 
    trace(inputWord.text); 
} 
gotoAndStop(5); 
stage.invalidate(); 
1

可能在第一幀上,inputWord尚未加載,因此出現錯誤。在下一個框架中,它被加載以便文本被成功設置。該解決方案是針對文本字段的存在測試設置前:

if (this.inputWord) this.inputWord.text = "smth";