“无法访问null对象引用的属性或方法。”没有任何有意义的堆栈跟踪

时间:2012-01-26 17:00:52

标签: flex exception null

在我的应用程序运行期间,我得到了

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.managers::SystemManager/stageEventHandler()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\managers\SystemManager.as:5649]

这是完整堆栈跟踪。显然,我猜有些不对劲,但我无法理解。 我有什么方法可以找到这种不良行为的起源吗?

编辑

将我的SDK源添加到我的调试器后,我现在可以准确地说出它是哪一行:

    private function stageEventHandler(event:Event):void

    {

        if (event.target is Stage)

            mouseCatcher.dispatchEvent(event); // This is line 5649

    }

mouseCatcher确实是null。当前事件目标确实是Stage对象,事件类型包含"deactivate" String。当事件发生在应用程序启动时(在我尝试进行任何类型的用户交互之前),我猜这是一种初始化错误,但在哪里?为什么?

2 个答案:

答案 0 :(得分:1)

查看源代码,这始终是您的最佳选择。 3.4 SDK是开源的(数据可视化和闪存播放器本身除外),您可能已经在FlashBuilder / FlexBuilder安装/ sdks文件夹中找到了它的源代码。使用grep或windows grep查找有问题的文件(或查找,无论你的船是什么漂浮)。打开SystemManager文件并检查该行发生了什么,检查对方法的调用(如果它再次公开使用grep,如果它是私有的,你只需要在SystemManager中查看)。尝试理解为什么它到达这一点,正如其他一些人所指出的那样,它可能是一个与时间相关的问题,你试图在它被分配之前访问它,在这种情况下是SystemManager,你可能需要推迟任何行动你“这会导致错误导致生命周期的后期部分(如果您正在使用初始化事件或预初始化尝试使用creationComplete,因为在调用createChildren方法之后将调度该错误)。

注意:我的位于此处

C:\ CleanFS \的SDK \挠曲\ 3.4.0.9271 \框架\项目\框架\ SRC \ MX \管理者

在我的带有SDK版本的SystemManager中,我的行号没有任何意义,因为它是块闭包而不是可执行行,所以你必须查看你的特定版本。

答案 1 :(得分:0)

看起来您正在使用Flex 3.4 SDK。您是否在应用程序加载时侦听ADDED_TO_STAGE事件?或者在加载Stage对象时做任何事情?如果是这样,您可能会遇到特定于3.4 SDK的错误: http://bugs.adobe.com/jira/browse/SDK-23332

最明显的解决方案是将3.4 SDK替换为更高版本(3.4A,3.5或3.6)。您可以在此处执行此操作:http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3

所有代码都应该与较新的Flex 3 SDK兼容。