2011-07-29 4 views
0

새로운 기능입니다. SWF 로더를 사용하여 Flex에서이 플래시 코드를 호출했습니다. 다음과 같은 오류가 발생했습니다. 여기에 header_text_fla에 대한 플래시 코딩이 첨부되어 있습니다.TypeError를 해결하는 방법 : 오류 # 1009 : flex 3에서 swf를 호출하는 동안 null 객체 참조의 속성이나 메서드에 액세스 할 수 없습니다.

TypeError : 오류 # 1009 : null 개체 참조의 속성이나 메서드에 액세스 할 수 없습니다. 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'에 대한 참조를 사용하고 있습니다. 아래쪽에있는 6 줄의 코드는 캡슐화되지 않은 것으로 보이기 때문에 혼란 스럽습니다. 변수 선언은 함수에 캡슐화되지 않아도되지만, setters 및 eventlistener 등록은 이와 같이 캡슐화되어서는 안됩니다. –

+0

디버거가 말하는 라인을 알려줄 수 있습니까? 여기에 접근하는 많은 것들이 있습니다. 이것은 코드를 책임질 수는 없습니다. 이것이 컴파일러/디버거가 라인 참조를 제공하거나 오류가 발생한 부분의 블록 참조를 제공하는 이유입니다. –

+0

플렉스에서 flashvars 데이터를 가져와 swf에 사용했습니다. – James

답변

1

이 코드는 매우 혼란 코드

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 : null 개체 참조의 속성이나 메서드에 액세스 할 수 없습니다. – 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 인스턴스를 정리하여 null로 만들고 콜백 함수가 호출됩니다.

은 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); 

그 방법, 가비지 컬렉터가 그것을 정리하지 않습니다. 내가 catch.Here을 시도하여 해결 한

+0

코드에 아무런 영향을주지 않았습니다 ........ .. :( – James