Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.04.2012, 02:40
Mirror13 вне форума Посмотреть профиль Отправить личное сообщение для Mirror13 Найти все сообщения от Mirror13
  № 1  
Ответить с цитированием
Mirror13
 
Аватар для Mirror13

Регистрация: May 2010
Адрес: Ногинск
Сообщений: 56
По умолчанию Поймать "непойманные" исключения

Допустим, произошло нехорошее событие, и было выброшено исключение, которое нигде не ожидает блок try - catch. При этом приложение просто упадет без вести, а хотелось бы вывести внятное сообщение об ошибке.

В языках, где выполнение идет синхронно, как правило, есть возможность обработать такое исключение. Хотя бы если обернуть в try - catch содержимое функции main. Или, как в PHP - с помощью регистрации обработчика непойманных исключений с помощью функции set_exception_handler.

В AS3, с его асинхронным выполнением, первый метод точно не пройдет. Я искал что-то, подобное второму, но нашел лишь способ, который не сработал:
Код AS3:
loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, handleGlobalErrors);
Это было написано в классе Main и успешно не ловило исключения.

Есть ли возможность сделать рабочий пример?


Последний раз редактировалось Mirror13; 06.04.2012 в 02:42.
Старый 06.04.2012, 08:59
Андрей911 вне форума Посмотреть профиль Отправить личное сообщение для Андрей911 Найти все сообщения от Андрей911
  № 2  
Ответить с цитированием
Андрей911
 
Аватар для Андрей911

Регистрация: Jun 2011
Сообщений: 127
Нужно писать так, чтобы нехороших событий не происходило. Случались только одно из тех, которое предопределено заранее.

Найдите подозрительные участки кода, вставьте проверки
Код AS3:
if(variable!=null)...
if(variable!=0) ...
if(typeof(variable)=='object')...
И так далее. А подозрительные блоки, заключите в try ... catch

Старый 06.04.2012, 10:13
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 3  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Код AS3:
package
{
	import flash.events.Event;
	import flash.events.UncaughtErrorEvent;
	import flash.utils.setTimeout;
 
	public class Test extends Sprite
	{
		public function Test()
		{
			super();
			addEventListener(Event.ADDED_TO_STAGE, onAdded);
		}
 
		private function onAdded(e:Event):void
		{
			loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onError);
			setTimeout(onTime, 2000);
		}
 
		private function onTime():void
		{
			var v:Sprite;
			addChild(v);
		}
 
		private function onError(e:Event):void
		{
			e.preventDefault();
			trace(e);
		}
	}
}
И нужно учитывать, что если не делать preventDefault, то в дебаг плеере выйдет ошибка. И еще, если флешка запущена под отладчиком, то сначала сработает отладчик, а уже только потом функция onError.
__________________
http://www.chessmax.ru

Старый 06.04.2012, 11:56
Mirror13 вне форума Посмотреть профиль Отправить личное сообщение для Mirror13 Найти все сообщения от Mirror13
  № 4  
Ответить с цитированием
Mirror13
 
Аватар для Mirror13

Регистрация: May 2010
Адрес: Ногинск
Сообщений: 56
Цитата:
Сообщение от Inet_PC Посмотреть сообщение
И нужно учитывать, что если не делать preventDefault, то в дебаг плеере выйдет ошибка. И еще, если флешка запущена под отладчиком, то сначала сработает отладчик, а уже только потом функция onError.
Я изначально именно такой способ и пробовал, но он не давал результата. Получается, именно из-за отладчика. Попробовал запустить как Релиз - все работает правильно. Спасибо!

Цитата:
Сообщение от Андрей911 Посмотреть сообщение
Нужно писать так, чтобы нехороших событий не происходило. Случались только одно из тех, которое предопределено заранее.
Ясное дело, что нужно делать все идеально - чтобы сразу без ошибок, и весь код можно было включать в книжку "Чистый код". Но жизнь - тяжелая штука...

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:34.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.