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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.04.2014, 14:53
grafillo! вне форума Посмотреть профиль Отправить личное сообщение для grafillo! Найти все сообщения от grafillo!
  № 1  
Ответить с цитированием
grafillo!

Регистрация: Sep 2011
Сообщений: 366
По умолчанию Как обрабатывать ошибки

Есть функция которая загружает фотки с юрл, если переменную f задать неверно то сценарий выполнения прерывается. Подскажите как обработать ошибку так чтобы если такого урл не сущесвтует это не приводило к прерыванию всего процесса, а например вставляло стандартную картинку?

Код AS3:
var f:String = "http://img-fotki.yandex.ru/get/9320/61651220.24/0_a1ac6_6793c413_.jpg";
ldf(f);
 
function ldf (f:String) {
 
	var foto:Loader = new Loader;
	foto.load(new URLRequest(f)); // здесь нужно загружать фото
	foto.contentLoaderInfo.addEventListener(Event.COMPLETE, addFotoLenta);
 
	function addFotoLenta (e:Event){
 
		addChild(foto);
 
	}}

Старый 22.04.2014, 15:00
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 2  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Кроме Event.COMPLETE слушайте ещё IOErrorEvent.IO_ERROR

Старый 22.04.2014, 18:45
grafillo! вне форума Посмотреть профиль Отправить личное сообщение для grafillo! Найти все сообщения от grafillo!
  № 3  
Ответить с цитированием
grafillo!

Регистрация: Sep 2011
Сообщений: 366
всё работает, но пишет ошибку: Error opening URL - эта ошибка не повлияет на работоспособность?

Старый 22.04.2014, 19:09
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
если флеша не падает - то не повлияет.
__________________
Марк Tween

Старый 22.04.2014, 22:30
grafillo! вне форума Посмотреть профиль Отправить личное сообщение для grafillo! Найти все сообщения от grafillo!
  № 5  
Ответить с цитированием
grafillo!

Регистрация: Sep 2011
Сообщений: 366
а метод обработки ошибок try - catch в данном случае лучше не использовать?

Старый 22.04.2014, 23:43
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от grafillo! Посмотреть сообщение
а метод обработки ошибок try - catch в данном случае лучше не использовать?
Загрузка через Loader#load() может создать как синхронную ошибку, так и асинхронную.
Синхронные исключения... Ах, давай с начала и по порядку!
Начнем, пожалуй.

Привет! Нужно сразу же научиться отличать ошибки от исключений (exceptions).
Ошибки бывают у всех, даже если ты (вдруг, уже) не женат.
Скорее всего сейчас под "ошибкой" ты подразумеваешь исключение (exceptions, еще раз).

Теперь, когда ошибки стали для нас исключениями, давай рассмотрим их типы. Исключения бывают двух типов: синхронные и асинхронные.

1. СИНХРОННЫЕ.
Синхронные выпадают нам через внутренние механизмы флеша (рантайма, adobe flasplayer(c) или adobe air(c)) или через инструкцию throw.
Внутренние механизмы скорее всего обычно выбрасывают исключения типа (подкласса) Error. То есть что мы можем словить в catch(value:Object), где в качестве Object можно указать заинтересованный в "кэтче" тип объекта, который сгенерит throw. Для справки, можно указывать несколько типов для нескольких catch.
Для справки EOFError.
Код AS3:
try {
   var o:Object  = ba.readObject();
} catch (error:EOFError) {
    // trace("Плохой формат у ba, не соответствует AMF3, бро");
} catch (error:TypeError) { // Обычный Error #1009
   // trace("Нулевой ba, bro");
}
Мы же, как прогеры можем сделать throwable что угодно:
Код AS3:
throw new Error("Непредсказуемая ошипка!");
throw "Ошибся в жизни, выбрав флеш!";
throw Sprite;
throw throw; //прокатит?
2. АСИНХРОННЫЕ
Асинхронные исключения флешом генерируются во время асинхронных операций, а по сути инициируются при помощи диспатча объектов подкласса ErrorEvent (это важно, они такие особенные).

Тут нужно упомянуть, что асинхронное исключение ловится только добавлением соответствующего слушателя на литерал ErrorEvent события.
там, "внутри рантайма" происходит примерно следующее:
Код AS3:
if (event is ErrorEvent) {
    if ( !this.hasEventListener(event.type) ) {
        throw event; // происходит неявное преобразование event -> event.toString(); могу ошибаться с конкретикой чего там throw;
    }
}
Простой пример:
Ваш объект генерит события типа ErrorEvent. Все вспоминаем, что литералом или "типом" (я не зря употребил двойные кавычки, чтобы отличать от типа именно объекта ErrorEvent) события во флеше является строка, например, "complete" в константе flash.events.Event.COMPLETE. Предположим, что таким "типом" события является строка "rampageBro". Итак, наш генерируемый объект выглядит так:

Применение

Код AS3:
const errorEvent:ErrorEvent = new ErrorEvent("rampageBro");
// что ж делать, диспатчим.
super.dispatchEvent(errorEvent);
Вот сделайте диспатч new ErrorEvent("rampageBro") и не словите его (ни один хендлер не будет подписан к этому "типу" события). Примите исключение. По вышеописанной процедуре.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 23.04.2014 в 00:22.
Старый 23.04.2014, 11:18
grafillo! вне форума Посмотреть профиль Отправить личное сообщение для grafillo! Найти все сообщения от grafillo!
  № 7  
Ответить с цитированием
grafillo!

Регистрация: Sep 2011
Сообщений: 366
а можно это всё упростить до пары предложений, а то как-то почти не въехал х)

Старый 23.04.2014, 11:25
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Ответ дан в псто 2.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Aug 2008
Адрес: RUS, Viipuri
Сообщений: 44
Без иронии, но моя жизнь разделилась на две части - до прочтения псто 2 и после (must read всем мимо проходящим).
__________________
لعبة الحياة

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

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

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


 


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


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