2013-04-18 2 views
0

내가 간단한 슬라이드 응용 프로그램에서 AS3-신호-V0.9-BETA를 사용하고와 1023 스택 오버 플로우. 내 신호 처리기에서 일부 조건을 기반으로 동일한 신호를 다시 보냅니다.오류 AS3-신호-V0.9-BETA

애플리케이션은 메소드를 전달 신호에 두 시간 후에 예외를 던진다. 다음은 스택 추적은 다음과 같습니다

오류 :

Error #1023: Stack overflow occurred. 
    at com.chetansachdev.components::SlideDeck/onNextSlidePleaseEvent()[D:\cb-trunk\Solutions\Components\Slidelib\src\com\chetansachdev\components\SlideDeck.as:75] 
    at org.osflash.signals::Slot/execute()[C:\Users\Robert\Documents\Flash\OSFlash\signals\as3-signals\src\org\osflash\signals\Slot.as:87] 
    at org.osflash.signals::OnceSignal/dispatch()[C:\Users\Robert\Documents\Flash\OSFlash\signals\as3-signals\src\org\osflash\signals\OnceSignal.as:125] 
    at com.chetansachdev.components::SlideDeck/onNextSlidePleaseEvent()[D:\cb-trunk\Solutions\Components\Slidelib\src\com\chetansachdev\components\SlideDeck.as:89] 
    at org.osflash.signals::Slot/execute()[C:\Users\Robert\Documents\Flash\OSFlash\signals\as3-signals\src\org\osflash\signals\Slot.as:87] 
    at org.osflash.signals::OnceSignal/dispatch()[C:\Users\Robert\Documents\Flash\OSFlash\signals\as3-signals\src\org\osflash\signals\OnceSignal.as:125] 
    ... 
    ... 

방법 :

mysignal.add(mySignalHandler); 

function mySignalHandler():void 
{ 
    if(condition) 
    { 
     // do something here.. 
    } 
    else 
    { 
     mysignal.dispatch(); 
    } 
} 

어떤 사람은 잘못, 어떤 날 지점 수 있습니다. 시그널 핸들러에서 디스패치 할 때 스택이 생성되고 있습니까? (나는 직접 메서드를 호출하지 않고, 신호를 보내고있다.)

답변

0

무한 루프입니다. 이것은 다음과 같이 쓰는 것과 같습니다 :

function inifityAndBeyond(){ 
    infinityAndBeyond(); 
} 

즉, 신호 처리기에 동일한 신호를 전달하는 것은 의미가 없습니다.

+0

답장을 보내 주시면 핸들러에서 메서드를 직접 호출하지 않습니다. 이벤트/신호를 파견 중이므로 무한 루프라고 생각하지 않습니다. 메소드 끝나기 전에 trace 문을두면 실행됩니다. –

+0

그런 다음 상황을 더 잘 나타내려면 질문에서 코드를 업데이트해야합니다. 현재와 ​​마찬가지로, 동일한 메소드를 재귀 적으로 호출하는 것과 같습니다. 신호에는 자동 비동기 지연이 없습니다. – Creynders

+0

의미가 있습니다. 다른 메서드를 호출하고 모든 신호를 제거하고 리스너를 한 번만 추가하려고했습니다. 몇 시간이 지난 후에도 예외가 발생합니다. 나는 다른 방법으로 그것을 구현할 것이고, 같은 방법을 다시 호출 할 필요가 없다. 답변 주셔서 감사합니다 :) –