在我的Flash应用程序中,我有多个使用Scrollpanes的窗口。因为我需要该功能,所以将scrollDrag属性设置为true。如果我关闭(在我的应用程序中)这些“窗口”中的一个,然后打开另一个,我的日志中似乎会出现很多此错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at fl.containers::ScrollPane/endDrag()

有时我得到数千个,我猜测这可能会使我的应用程序速度变慢,但否则不会造成问题。浏览adobe代码中的滚动窗格,endDrag非常简单:
protected function endDrag(event:MouseEvent):void {
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, doDrag);
    }

阶段var是唯一在此处可以为null的东西。

我唯一想做的是在应用程序窗口关闭之前设置scrollDrag = false,以便没有人监听该事件。还有其他建议吗?

最佳答案

我试图重新创建您的方案,所以我有一个要由ScrollPane加载的虚拟剪辑,并且
ScrollPane包含带有链接的MovieClip(Export for Actionscript),因此我可以创建多个实例。同样在该剪辑中,在ScrollPane组件上方的一层中,我放置了一个关闭按钮。
我的第一个想法是调试fla,然后首先查看它到底在哪里失败。当我不断得到这个信息时,我不愿发现任何东西:

Cannot display source code at this location.
然后,我按照您的指示进行操作,并找到了endDrag()函数。我将其更改为:
protected function endDrag(event:MouseEvent):void {
            if(stage) stage.removeEventListener(MouseEvent.MOUSE_MOVE, doDrag);
        }
并尝试了。第一次没有用,就好像没有编译一样。我尝试在Flash IDE中编辑该类,然后看到了这个小警告。这就是我的意思:

因此,我将ScrollPane.as从Flash CS4文件夹复制到了./fl/containers/ScrollPane(基本上相对于.fla)。该.as文件已编译,错误消失了。
简短的版本是:是的!您发现了问题所在:)添加一个if作为快速修复来检查空对象,并且不要忘记将ScrollPane.as相对于.fla文件或保存在类路径中,然后再次进行编译。
HTH,
乔治

关于flash - 当scrollDrag = true时,ScrollPane/endDrag()中的空对象引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2413350/

10-13 08:47