ActionScript 3.0 UncaughtErrorEvent не работает должным образом

#apache-flex #actionscript-3 #exception

#apache-flex #actionscript-3 #исключение

Вопрос:

Я действительно не понимаю UncaughtErrorEvent и не могу заставить его работать в моем приложении Air 2.6. Если я выполняю пошаговый просмотр кода с помощью отладчика, я получаю очень странные результаты.

Это код:

  public class Main extends Sprite{
      public function Main(){
           loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);          
                     // ...
           }
           ...
      private function onUncaughtError(e:UncaughtErrorEvent):void
      {
           var error:Error = e.error;
           Logger.log("Uncaught Error - Type: "   e.type   " - Message: "   error.message, "session");
      }
 }
  

Я устанавливаю точку останова в строке var error:Error = e.error; и запускаю приложение
в какой-то момент возникает исключение, и отладчик должным образом завершает работу в определенной строке.

Теперь начинается странная часть.

Когда я нажимаю «step over (F6)», я ожидаю, что приложение перейдет к следующей строке «Logger.log(…» — но вместо этого консоль отобразит выданное исключение

 Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.
  

и приложение просто возобновляет работу. Строка «Logger.log(…» никогда не выполняется
как это вообще возможно? Как может быть, что отладчик завершает работу var error:Error = e.error , но следующая строка не выполняется?

Спасибо за разъяснения

Ответ №1:

Ссылка AS3 считывает

Когда содержимое выполняется в отладочной версии среды выполнения, такой как отладочная версия Flash Player или AIR Debug Launcher (ADL), при возникновении неперехваченной ошибки появляется диалоговое окно «неперехваченная ошибка». Для этих версий среды выполнения диалоговое окно с ошибкой появляется, даже если прослушиватель зарегистрирован для события uncaughtError. Чтобы предотвратить появление диалогового окна в этой ситуации, вызовите метод preventDefault() объекта UncaughtErrorEvent.

Комментарии:

1. И, кстати, e.error может быть либо Error , либо ErrorEvent .