在开发 Flash 项目的过程中,我遇到了一个困扰我很多次的问题。它看起来像这样:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at fl.containers::BaseScrollPane/fl.containers:BaseScrollPane::drawBackground()
at fl.controls::TileList/fl.controls:TileList::draw()
at fl.core::UIComponent/::callLaterDispatcher()
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/fl.controls:BaseButton::drawBackground()
at fl.controls::BaseButton/fl.controls:BaseButton::draw()
at fl.core::UIComponent/drawNow()
at fl.controls::ScrollBar/fl.controls:ScrollBar::draw()
at fl.core::UIComponent/::callLaterDispatcher()
现在,就我而言,此错误源于在代码中初始化组件,而这些组件尚未明确添加到 CS4 中的 fla 组件库中。过去,我在尝试在代码中动态创建 ScrollPanes 时遇到过这个问题。我通过将 ScrollPane 组件添加到我的 Main.fla 库中解决了这个问题。这似乎工作了一段时间。
现在,我正在尝试使用 AstraFlash AutoComplete 框。我已将正确的 fla 文件导入 CS4,并将一个 AutoComplete 框放入我的 Swf。一切正常,但加载 Swf 时出现上述错误。我的想法是 AutoComplete 框试图创建一个 ScrollPane 作为其功能的一部分。好的,我明白这一点,所以我也将 ScrollPane 组件添加到库中,结果相同。
通常我只会弄乱库组件/设置,直到我摆脱错误,但我厌倦了遇到这个问题,我想知道解决问题的正确方法。所以,我有几个问题:
我真的需要这个 AutoComplete 组件才能工作。假设 AS3 代码是正确的,但我仍然收到上述错误,您认为哪些设置可能不正确?出于沮丧,我尝试将所有可能的组件添加到库以及库的组件 Assets 文件夹中,只是为了有一个起点,但我仍然遇到错误。
任何帮助表示赞赏。
最佳答案
我不确定我是否理解您的设置。我假设您有一个包含一些组件的子 fla,您需要在父(加载程序)fla 中创建这些组件的实例。
如果您将子 fla 中的类编译到父 fla 中,它应该可以工作,但这会重复。
问题是当您加载 swf 时,这些类位于不同的 ApplicationDomain 中.
简而言之,这就是管理 swf 中的类的东西,因此您不会在加载器和加载的 swf 以及其他一些安全内容之间发生类冲突。
我制作了一个简单的 fla,它包含一个 Button 组件(fl.controls.Button)并从加载器 fla 加载它。我没有将 Button 组件添加到 loader fla,而是使用加载的 swf 的应用程序域创建了一个按钮实例。就是这样:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
loader.load(new URLRequest('componentContainer.swf'));
function loaded(event:Event):void {
addChild(loader.content);
var SWFButton:Class = loader.contentLoaderInfo.applicationDomain.getDefinition('fl.controls.Button') as Class;
var button = new SWFButton();
button.label = 'Test';
addChild(button);
}
Programming Actionscript 3.0 中有一个关于此类问题以及如何使用 ApplicationDomain 的页面,但老实说我并没有完全理解它。
哈,
乔治
关于actionscript-3 - 将组件添加到 Swf 库的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162529/