2013-04-18 25 views
0

我在一個簡單的幻燈片應用程序中使用as3-signals-v0.9-BETA。在我的信號處理程序中,我基於某些條件再次調度相同的信號。錯誤1023與as3-signals-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

Thx爲您的答覆。我不直接從處理程序調用方法。我正在發送一個事件/信號,所以我不認爲這是一個無限循環。如果我在方法結束之前放置了一條跟蹤語句,它會被執行。 –

+0

然後,您需要更新您問題中的代碼以更好地表示情況。就像現在這樣,它就像遞歸地調用同一個方法一樣。信號沒有自動異步延遲。 – Creynders

+0

有道理。我嘗試調用另一種方法,並刪除所有信號並只添加一次監聽器。幾個小時後,我仍然得到例外。我將以另一種方式實現它,我不必再次調用相同的方法。感謝您的回答 :) –