2012-02-15 51 views
1

我偶爾會收到彈出式閃光燈此錯誤:AS3錯誤#2044:未處理的錯誤:同時使用的URLLoader即使IOErrorEvent事件偵聽器

錯誤#2044:未處理的錯誤:。文=

我的代碼是在這裏:

private var _myLoader:URLLoader = new URLLoader(); 

    public function load():void {  
     var finalURL = http://xxxxx.com/service_staging.php/next; 

     var myRequest:URLRequest = new URLRequest(finalURL); 

     // add event listeners 
     this._myLoader.addEventListener(Event.COMPLETE, this._completeHandler); 
     this._myLoader.addEventListener(Event.OPEN, this._openHandler); 
     this._myLoader.addEventListener(ProgressEvent.PROGRESS, this._progressHandler); 
     this._myLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this._securityErrorHandler); 
     this._myLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, this._httpStatusHandler); 
     this._myLoader.addEventListener(IOErrorEvent.IO_ERROR, _ioErrorHandler); 

     try { 
      this._myLoader.load(myRequest); 
     } catch (_error:SecurityError) { 
      Logger.error('JSONRequest.as - catch: A SecurityError has occurred:', _error); 

     } catch(_error:IOErrorEvent) { 
      Logger.error("JSONRequest.as - catch: IOErrorEvent:", _error);  

     } catch(_error:Error) { 
      Logger.error("JSONRequest.as - catch: Error catch: ", _error); 
     } 
    } 

    //----------------------------------------------------------  

    private function _completeHandler(event:Event):void {   
     Logger.info('JSONRequest.as - _completeHandler()'); 


     Logger.info('this._myLoader.data', this._myLoader.data); 

     // decode the object 
     this._JSONObject = JSON.decode(this._myLoader.data); 

     // dispatch the complete event 
     this.dispatchEvent(new Event(Event.COMPLETE)); 
    } 

    //----------------------------------------------------------  

    private function _ioErrorHandler(_error:IOErrorEvent):void { 
     Logger.error('JSONRequest.as - _ioErrorHandler()'); 

     dispatchEvent(new ErrorEvent(ErrorEvent.ERROR)); 
    } 

    //---------------------------------------------------------- 

    private function _securityErrorHandler(_event:SecurityErrorEvent):void { 
     Logger.info("JSONRequest.as - _securityErrorHandler(): ", _event); 

     dispatchEvent(new ErrorEvent(ErrorEvent.ERROR)); 
    } 

    //---------------------------------------------------------- 

    private function _openHandler(event:Event):void { 
     Logger.info("JSONRequest.as - openHandler: " + event); 
    } 

    //---------------------------------------------------------- 

    private function _progressHandler(event:ProgressEvent):void { 
     Logger.info("JSONRequest.as - progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal); 
    } 

    //---------------------------------------------------------- 

    private function _httpStatusHandler(event:HTTPStatusEvent):void { 
     Logger.info("JSONRequest.as - httpStatusHandler: " + event); 
     Logger.info("status: " + event.status); 
    } 

    //---------------------------------------------------------- 

    public function get JSONObject():Object { 
     return this._JSONObject; 
    } 

    //---------------------------------------------------------- 

我已經處理,如果有正從服務中的JSON數據的問題,但這個錯誤似乎仍然即使我聽它彈出。

任何想法將不勝感激。

謝謝。

+0

我有這個相同的問題。即使我正在處理所有事件,我也會得到一個ioError彈出窗口。這主要發生在我的互聯網連接中斷時(我正在測試一個電話應用程序,互聯網連接不穩定)。如果任何人有解決方案,那就太棒了! – DoomGoober 2014-03-20 04:58:34

回答

2

您應該添加那些聽衆_myLoader.contentLoaderInfo

this._myLoader.contentLoaderInfo.addEventListener(Foo.BAR, onFooBar); 
+0

對不起 - 我應該包括: private var _myLoader:URLLoader = new URLLoader(); 我不認爲URLLoader具有contentLoaderInfo屬性。我正在請求並且大部分時間都收到一個JSON對象。 – Oli 2012-02-17 11:13:37

+0

對不起,但URLLoader沒有'contentLoaderInfo'屬性... – 2014-03-20 10:33:42

+0

真@NicolasSiver,我一定在想Loader類而不是URLLoader。 UncaughtErrorEvent僅在10.1版本中可用,這些日期相對安全,可作爲基準目標,但幾年前可能不會(例如:客戶端請求FP 9支持) – scriptocalypse 2014-03-22 19:58:25

1

要的URLLoader捕獲未處理IO錯誤,你需要的UncaughtErrorEvents幫助:

loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onGlobalError); 


private function onGlobalError(e:UncaughtErrorEvent):void { 
    e.preventDefault(); 
    trace("ERROR: " + e.toString()); 
} 

//Trigget it... 
var urlLoader: URLLoader = new URLLoader(); 
urlLoader.load(new URLRequest("somewhere/nowhere")); 
0

首先,您需要了解更多信息這個錯誤...堆棧,ErrorEvent的目標等。

您是否嘗試過偵聽UncaughtErrorEvent.UNCAUGHT_ERROR? 下面的示例很好地解釋了這一點: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/LoaderInfo.html#uncaughtErrorEvents 並允許您捕獲任何未被捕獲的錯誤,包括未處理的ErrorEvent錯誤 並選擇要執行的操作。

我首先建議得到儘可能多的調試信息成爲可能,把一個斷點var errorEvent:ErrorEvent = event.error as ErrorEvent;

希望在這個階段,你將有一個固定的,或者至少一種變通方法(只需添加您的錯誤處理代碼後這個斷點 )

相關問題