关于 apache flex:Error #2099: 加载对象未充分加载以提供此信息

Error #2099: The loading object is not sufficiently loaded to provide this information

我有一个由 AS3 组件组成的 Flash 应用程序,我试图在 Flex 中运行。

在 Flash 中,将主要组件添加到舞台后,加载器对象(loaderInfo.loader)为空,这很好,我处理了。

在 Flex 中,在 applicationComplete 事件中,我将主要组件添加到阶段,加载器对象的 getter 引发异常 - 错误 #2099:加载对象未充分加载以提供此信息。

此外,当加载的 SWF 文件的属性和方法可访问时调度的 INIT 事件未触发,这可能是问题的一部分。但我无法弄清楚为什么它没有被发送。

知道为什么相同的代码有两个不同的结果吗?


您肯定需要发布代码,以便我们看得更清楚。

话虽如此,在 addChild 之后,您是尝试为"主要组件"还是为您的 mx:Application 获取 loaderInfo?

1
2
3
4
5
6
7
//onApplicationComplete event handler
var myswf:SWFLoader = new SWFLoader();
myswf.load(...);
addChild(nmyswf);

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

这就是你在做的吗?如果是这样,您需要在"主要组件"中添加一个事件侦听器(假设是外部加载的 swf),以了解 Event.COMPLETE 何时发生。

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

希望对您有所帮助。如果没有,请发布代码。


我不确定这是否与 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


嗯,这似乎是一个令人沮丧的问题。当您说"主要组件"时,我想您是指 Flash 中的文档类?

我对 flex 的了解不够,无法评论您描述的问题,但我可以建议您尝试使用 ADDED_TO_STAGE 而不是 INIT 作为您的事件...

1
2
3
4
5
6
7
8
9
10
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.

加载它