2010-07-23 86 views
2

試圖在我的項目中實現新的FP 10.1全局錯誤處理程序,但無論我做什麼未被捕獲的錯誤,都將顯示「異常」窗口(包括調試版本和發行版本SWF)。我想要做的就是防止這些彈出窗口,而是發送一條消息給我的記錄器。這裏是我的代碼...Flash Player 10.1的全局錯誤處理程序不起作用

編輯:我現在簡化了代碼。有人能幫我一個忙,並測試下面的課程,看看它是否適用於他?因爲它不適合我! ...

package 
{ 
    import flash.display.Sprite; 
    import flash.events.UncaughtErrorEvent;  

    public class GlobalErrorHandlerTest extends Sprite 
    { 
     public function GlobalErrorHandlerTest() 
     { 
      stage.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError); 
      throw new Error(); 
     }   

     private function onUncaughtError(e:UncaughtErrorEvent):void 
     { 
      var message:String; 
      if (e.error["message"]) 
      { 
       message = e.error["message"]; 
      } 
      else if (e.error["text"]) 
      { 
       message = e.error["text"]; 
      } 
      else 
      { 
       message = e.error["toString"](); 
      } 

      trace("Uncaught Error: " + e.text); 
     } 
    } 
} 

回答

1

我有同樣的問題,因爲上面 - 我引用stage.loadInfo,認爲作爲參考該階段,它會捕獲所有未被捕獲的錯誤。然而,這是不行的,你必須真正遵循grapefukt的建議逐字:在實際的基本展示對象,將代碼

loaderInfo.uncaughtErrorEvents.add...

當您嘗試放到stage.loaderInfoframe.loaderInfo,它沒有任何效果。

就我而言,我不得不將它放在擴展基本顯示對象的類中。很奇怪。

+0

我希望這會工作,但唉,它不適合我。我已將事件偵聽器直接添加到我的基本顯示對象。通常這個代碼應該被它抓住,對吧? ()函數():void { \t throw new Error(「foo!」); },3000); ' 但它沒有。另外我想它應該像AIR一樣對基於Web的Flash起作用? – BadmintonCat 2011-04-12 04:29:05

+1

Haaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr !!!!我現在知道這個問題是什麼。這是一個誤會!事件處理程序被調用,但錯誤仍然會冒泡並打開Flash播放器中的異常窗口。所以解決方案是event.preventDefault()! – BadmintonCat 2011-04-28 12:05:51

0

你不能設置監聽到一個特定的視圖,但在主舞臺的對象,因爲它是在顯示列表的頂部(因此拿起任何其子的任何異常) 。

+0

「查看」實際上是最頂層的顯示對象容器(它只是給出一個屬性,我的主類)。如果我使用view.stage.loaderInfo.uncaughtErrorEvents.addEventListener ... – BadmintonCat 2010-07-23 07:18:12

+0

嗯任何其他想法爲什麼(新)上面的代碼將無法正常工作? – BadmintonCat 2010-07-25 03:37:25

1

的文檔說:

分派事件與任一個LoaderInfo對象或Loader對象相關聯的UncaughtErrorEvents對象通常。

因此,你一定要聽loaderInfo是你的頂級顯示對象的uncaughtErrorEvents屬性:

loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); 
+0

仍然沒有運氣!我沒有想法! _anyone_可以確認上面的例子對他們有效嗎? – BadmintonCat 2010-08-25 14:21:47

0

更新:我想我可能知道你爲什麼認爲這不起作用。我犯了在調試器內部測試的錯誤。當調試器停止運行時錯誤時,我認爲這證明我的uncaughtErrorHandler函數沒有工作。事實上,這是錯誤的。這只是調試器的一個怪癖。調試器仍然會停止,就好像它是未處理的錯誤或異常一樣,但如果再次按下Run,則會看到它執行錯誤處理代碼。請參閱我的線程Flex 4.0/4.5 global error handling瞭解更多信息。

原始回覆: 我在尋找相同的信息。 API文檔中的示例和關於此主題的各種博客都不適用於我。我只嘗試loaderInfo,stage.loaderInfo,systemManager.loaderInfo ...它沒有區別。我甚至在單個測試案例中嘗試了所有這些方法! addEventListener正在設置,但未捕獲的錯誤不會觸發uncaughtErrorHandler。哎呀。我在這方面浪費了太多時間!我將它簡化爲一個非常簡單的程序,除了使用主mxml文件中的所有代碼之外。

這個怎麼樣:有人可以發佈一個全球錯誤處理的例子,工作嗎?我在一個mx:基於應用程序的mxml Flex項目中使用了Flex SDK 4.1(我也嘗試過使用4.5),將FP 10.1(或4.5 for 10.2)作爲目標。

我的主題:Flex 4.0/4.5 global error handling