ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!

ActionScript 3.0. Урок 9-1. Пример обработки ошибок

Перейти вниз

ActionScript 3.0. Урок 9-1. Пример обработки ошибок

Сообщение автор Admin в Вс Фев 21, 2010 4:10 am

Чтобы загрузить внешнее содержимое из внешнего источника во флеш-плеер, нужно использовать класс URLLoader (flash.net.URLLoader). Экземпляр класса URLLoader загрузит текстовый файл в свое свойство data, чтобы он был прочитан как строка. Так как процесс размещения, загрузки и чтения внешнего файла во флеш-плеере занимает время, для индикации того, что содержимое было загружено и доступно, используются события. Кроме того, события используются для отображения прогресса загрузки, а также любых происходящих ошибок.
Класс URLLoader использует метод load для начала процесса загрузки, который так же способен выдавать исключения различных типов ошибок. При использовании класса URLLoader для загрузки внешнего контента, всегда лучше прислушиваться ко всем синхронным ошибкам наряду с вызовом метода load внутри выражения try..catch..finally. Этот пример покажет, как загрузить внешний текстовый файл во флеш-плеер со всей необходимой проверкой ошибок.

Шаги:

1. В исходных файлах откройте файл LoadTextFile.fla в папке Errors. Этот файл содержит два текстовых поля, одно из которых будет показывать загруженный текст, а другое будет показывать ошибки при их наличии.
2. Выберите первый кадр на слое ActionScript и откройте панель Actions.
3. Добавьте следующий скрипт на панель Actions.

// Load textfile.txt text into loader instance
var request:URLRequest = new URLRequest("textfile.txt");
var loader:URLLoader = new URLLoader();

// Listen for complete event (and others if desired)
loader.addEventListener(Event.COMPLETE, loadComplete);
// Listen for error events
loader.addEventListener(IOErrorEvent.IO_ERROR, loadIOError);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loadSecurityError);

// Complete event handler
function loadComplete(event:Event):void {

// output loaded text to trace
// window and contentText field
trace(loader.data); // textfile.txt contents
contentText.text = loader.data;
}
// Handler for IO error
function loadIOError(event:IOErrorEvent):void {

// output errors to trace
// window and errorText field
trace("IOError: "+event);
errorText.text = "IO Error: "+event;
}
// Handler for security error
function loadSecurityError(event:SecurityErrorEvent):void {

// output errors to trace
// window and errorText field
trace("SecurityError: "+event);
errorText.text = "Security Error: "+event;
}

// Try the load operation and
// catch any thrown exceptions
try {
loader.load(request);
}catch (error:ArgumentError){

// output errors to trace
// window and errorText field
trace("ArgumentError: "+error);
errorText.text = "Argument Error: "+error;
}catch (error:MemoryError){
trace("MemoryError: "+error);
errorText.text = "Memory Error: "+error;
}catch (error:SecurityError){
trace("SecurityError: "+error);
errorText.text = "Security Error: "+error;
}catch (error:TypeError){
trace("TypeError: "+error);
errorText.text = "Type Error: "+error;
}catch (error:Error){
trace("Unknown Error: "+error);
errorText.text = "Unknown Error: "+error;
}

Здесь каждое ошибочное событие имеет собственный листенер, отслеживающий ошибку, если она произошла во время загрузки. Кроме того, каждый тип выданной операцией load ошибки проверяется внутри соответствующих блоков catch. Завершающий блок catch типа Error (top-level Error) используется тогда, когда ошибка была вызвана за пределами других блоков catch. Тогда, этот последний блок захватит ошибку, независимо от ее типа.

4. После того, как вы закончили добавлять код, протестируйте свой фильм. Вы должны увидеть следующее.

(https://i.servimg.com/u/f69/14/89/42/41/exampl10.png)

Рисунок: Текстовый файл, загруженный во флеш-плеер с проверкой ошибок

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

В качестве альтернативного подхода вы можете использовать один обработчик событий, который бы использовался для всех ошибочных событий. Сделав таким образом, вы по-прежнему будете захватывать и обрабатывать все ошибки, но при меньшем количестве кода.

// Load textfile.txt text into loader instance
var request:URLRequest = new URLRequest("textfile.txt");
var loader:URLLoader = new URLLoader();

// Listen for complete event (and others if desired)
loader.addEventListener(Event.COMPLETE, loadComplete);
// Listen for error events using one handler
loader.addEventListener(IOErrorEvent.IO_ERROR, loadError);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loadError);

// Complete event handler
function loadComplete(event:Event):void {

// output loaded text to trace
// window and contentText field
trace(loader.data); // textfile.txt contents
contentText.text = loader.data;
}
// Handler for errors
function loadError(event:ErrorEvent):void {

// output errors to trace
// window and errorText field
trace("Asynchronous Error: "+event);
errorText.text = "Asynchronous Error: "+event;
}

// Try the load operation and
// catch any thrown exceptions
try {
loader.load(request);
}catch (error:Error){

// output errors to trace
// window and errorText field
trace("Caught Error: "+error);
errorText.text = "Caught Error: "+error;
}

Здесь по-прежнему все ошибки выявляются, но написано меньше кода. Следует отметить, что параметр event метода loadError теперь имеет тип ErrorEvent (flash.events.ErrorEvent). Ошибки события, так же как и все выдаваемые флеш-плеером ошибки, имеющие тип Error наряду со своим собственным типом (их классы расширяют класс Error), также имеют тип ErrorEvent. Задавая параметру event тип ErrorEvent, вы можете быть спокойны, так как, какая ошибка бы ни произошла, она полностью совпадет с типом используемого в обработчике событий
avatar
Admin
Admin

Сообщения : 92
Очки : 280
Репутация : 36
Дата регистрации : 2010-02-20

Посмотреть профиль http://game-dll.mirbb.net

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения