繁体   English   中英

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

[英]“Cannot access a property or method of a null object reference.” without any meaningfull stack trace

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

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"字符串。 当事件在应用程序启动时发生(在我尝试进行任何类型的用户交互之前),我想这是一种初始化错误,但是在哪里? 为什么?

查看源代码,这始终是您的最佳选择。 3.4 SDK是开源的(除了数据可视化和Flash Player本身),您可能已经在FlashBuilder / FlexBuilder install / sdks文件夹中找到了它的源代码。 使用grep或Windows grep查找有问题的文件(或查找使您的船浮起的东西)。 打开SystemManager文件,检查该行发生了什么,检查对该方法的调用(如果它再次是公共使用grep,如果它是私有的,则只需要在SystemManager中查看)。 试着理解为什么会到达这一点,正如其他人指出的那样,这可能是与计时相关的问题,您试图在分配某物之前对其进行访问,在这种情况下,您可能需要延迟SystemManager的所有操作这样做会导致错误在生命周期的后期出现(如果您使用的是Initialize事件或预初始化,请改用creationComplete,因为它将在调用createChildren方法之后分派)。

注意:我的位于这里

C:\\ CleanFS \\ SDKs \\ flex \\ 3.4.0.9271 \\ frameworks \\ projects \\ framework \\ src \\ mx \\ managers

在带有版本SDK的SystemManager副本中,该行号没有任何意义,因为它是一个块关闭而不是可执行行,因此您必须查看您的特定版本。

您似乎正在使用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向后兼容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM