是什么导致Flash错误#2012(无法实例化类)?

时间:2020-03-05 18:54:52  来源:igfitidea点击:

我是ActionScript 3的新手,遇到了一个问题:

使用Flex Builder 3,我创建了一个包含几个简单类的项目。如果类A中的代码实例化了类B的对象(类B在其自己的源文件中),则代码可以正常编译,但是出现以下运行时错误:

ArgumentError: Error #2012: B class cannot be instantiated.

有人可以解释我在做什么错吗?

更新:请在下面查看我自己的答案(由于我尚未注册,所以我无法将其投票给顶部)。

解决方案

回答

这通常意味着该类别信息未包含在SWF中。

确保正在导入该类,并且在某处引用了它(因此编译器会将其包括在SWF中)。

顺便说一句,这是运行时错误代码:

http://livedocs.adobe.com/flex/201/langref/runtimeErrors.html

(虽然没有太多有用的信息)

迈克·钱伯斯

[email protected]

回答

值得注意的是,如果我们包括其他人构建的类,而他们使用的是Flash CS3,而我们使用的是Flex,反之亦然,则每个类的核心库都是不同的,并且两者中都未包含某些东西。请查看两个参考文档,以确保:

CS3:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/

Flex:http://livedocs.adobe.com/flex/2/langref/

回答

我终于意识到问题出在哪里:B类是DisplayObject的子类,我现在看到它是一个抽象类。 B类没有实现抽象成员,因此产生了错误。我可能会将B类从Sprite改为子类。

这似乎是编译器应解决的问题。这不是意味着抽象成员的实现可以等到运行时这一事实吗?即使这样,也至少应收到一个编译器警告会很好。

感谢大家的回答,希望他们能帮助遇到错误2012的其他人。