Ошибка № 2099: загружаемый объект недостаточно загружен, чтобы предоставить эту информацию - PullRequest
2 голосов
/ 04 декабря 2008

У меня есть приложение Flash, состоящее из компонентов AS3, которые я пытаюсь запустить во Flex.

Во Flash, после того, как основной компонент добавлен на сцену, объект загрузчика (loaderInfo.loader) имеет значение null, и это нормально, и я справляюсь с этим.

В Flex во время события applicationComplete я добавляю главный компонент на сцену, и метод получения объекта загрузчика вызывает исключение - Ошибка № 2099: загружаемый объект недостаточно загружен для предоставления этой информации.

Кроме того, событие INIT, которое отправляется, когда доступны свойства и методы загруженного SWF-файла, не запускается, что, вероятно, является частью проблемы. Но я не могу понять, почему это не отправляется.

Есть идеи, почему один и тот же код имеет два разных результата?

Ответы [ 3 ]

1 голос
/ 12 декабря 2008

Я не уверен, что это происходит с событием INIT, но я знаю, что во Flash Player 9, я полагаю, это версия вашего SWF? Существует ошибка при обращении к загрузчику через его собственную цель evt. В основном, если вы загружаете что-то и пытаетесь получить доступ к свойствам загрузчика, хотя evt.target.loaderInfo.loader не может найти себя и выдает ошибку, описанную в вашем вопросе. Я считаю, что это известная ошибка для flash player 9, которая была исправлена ​​с выпуском CS4 и flash player 10.

Вот ссылка на ветку с описанием некоторых проблем, надеюсь, это поможет

http://www.actionscript.org/forums/showthread.php3?t=137599

1 голос
/ 09 июня 2009

Вам определенно нужно написать код, чтобы мы лучше видели.

С учетом вышесказанного, после addChild вы пытаетесь получить loaderInfo для "основного компонента" или для вашего mx: Application?

Псевдо

//onApplicationComplete event handler
var myswf:SWFLoader = new SWFLoader();
myswf.load(...);
addChild(nmyswf);

trace(myswf.loaderInfo.loader);
//end onApplicationComplete

Это то, что вы делаете? Если это так, вам нужно добавить прослушиватель событий в ваш «основной компонент» (при условии, что SWF загружен извне), чтобы узнать, когда происходит Event.COMPLETE.

var myswf:SWFLoader = new SWFLoader();
myswf.addEventListener(Event.COMPLETE, onMySWFComplete);
//..rest of code

Надеюсь, это поможет. Если нет, то почтовый индекс.

1 голос
/ 08 декабря 2008

Ммм, это похоже на неприятную проблему. Когда вы говорите «основной компонент», я предполагаю, что вы имеете в виду класс документа во Flash?

Я недостаточно осведомлен о flex, чтобы комментировать описанную вами проблему, но я могу предложить вам попробовать ADDED_TO_STAGE вместо INIT в качестве вашего мероприятия ...

public class MainFlashClass extends Sprite {
  public function MainFlashClass() {
    addEventListener(Event.ADDED_TO_STAGE, onInit);
  }
  public function onInit(e:Event):void {
    removeEventListener(Event.ADDED_TO_STAGE, onInit);

    // do your initialisation code here
  }
}

Это может работать для обоих сценариев. Я нашел ADDED_TO_STAGE более полезным, потому что он всегда запускается, независимо от того, загружен ли класс уже при выполнении swf (как класс документа) или если он загружается с Loader.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...