2

在我的 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);
    }

stage var 是这里唯一可以为空的东西。

我唯一能想到的就是在我的应用程序的窗口关闭之前设置 scrollDrag=false ,这样就没有任何东西在监听该事件。还有其他建议吗?

4

4 回答 4

3

我试图重新创建你的场景,所以我有一个虚拟剪辑由 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 编辑

所以我将 ScrollPane.as 从 Flash CS4 文件夹复制到 ./fl/containers/ScrollPane (基本上相对于 .fla)。这个 .as 文件被编译,错误消失了。

简短的版本是:是的!您找到了问题点 :) 添加一个 if 以检查 null 对象作为快速修复,并且不要忘记在再次编译之前将 ScrollPane.as 相对于 .fla 文件或类路径保存。

HTH,乔治

于 2010-03-20T04:04:27.500 回答
3

以防万一有人仍在寻找解决方案,对我有用的是子类化 ScollPane 类并覆盖 endDrag 函数

package {
import fl.containers.*;
import flash.events.*;
public class ScrollPain extends ScrollPane {
    protected override function endDrag(event:MouseEvent):void {
        if (stage) {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, doDrag);
        }
    }
}

}

完全归功于dawsonk在 FlashKit 论坛上的这一点。FlashKit 线程链接。

于 2013-01-15T06:38:52.570 回答
2

使用带有 scrollDrag = true 的滚动窗格时,我遇到了同样的问题。我对我的问题的解决方案是设置scrollDrag = false,每次我从显示中删除滚动窗格(更改框架等时)

希望能帮助到你...

于 2012-09-10T00:44:31.033 回答
0

localhost 的解决方案对我有用,所以谢谢。然而,我用头撞墙了几个小时,直到我意识到我忘记将所有对 ScrollPane 类的代码引用更改为引用 ScrollPain 类。

这是一个示例:即使在我的库中更改了 ScrollPane 组件的类之后,我仍然收到错误消息。然后我意识到,在实例化 ScrollPane 的类中,我需要将实例化从

var scrollPane:ScrollPane = new ScrollPane(); 

说:

var scrollPane:ScrollPain = new ScrollPain (); 

此外,我需要将我的导入语句从

import fl.components.ScrollPane;

说:

import com.mysite.ScrollPain;

我确实意识到这是一个初学者的错误。:)

于 2014-08-17T05:29:36.300 回答