在我的Flash应用程序中,我有多个使用Scrollpanes的窗口。 scrollDrag属性在这些上设置为true,因为我想要该功能。如果我关闭(在我的应用程序中)其中一个'窗口'并打开另一个,我似乎在我的日志中显示了很多这个错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at fl.containers::ScrollPane/endDrag()
有时我会收到成千上万的这些,我猜这可能会减慢我的应用程序,但其他方面并没有造成问题。通过adobe代码查看scrollpane,endDrag非常简单:
protected function endDrag(event:MouseEvent):void {
stage.removeEventListener(MouseEvent.MOUSE_MOVE, doDrag);
}
stage var是唯一可以为null的东西。
我唯一能想到的就是在我的应用程序中的窗口关闭之前设置scrollDrag = false,以便没有任何东西正在侦听事件。还有其他建议吗?
答案 0 :(得分: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.as从Flash CS4文件夹复制到./fl/containers/ScrollPane(基本上相对于.fla)。此.as文件已编译,错误消失。
短版是:是的!你发现问题点:)添加一个if来检查null对象作为quickfix并且不要忘记在再次编译之前相对于.fla文件或类路径保存ScrollPane.as。
HTH, 乔治
答案 1 :(得分: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);
}
}
}
}
在FlashKit论坛上完全归功于 dawsonk 。 FlashKit thread link.
答案 2 :(得分:2)
使用scrollpane和scrollDrag = true时遇到同样的问题。
我的问题的解决方案是设置scrollDrag = false
,每次我从显示中删除滚动窗格(更改框架等时)。
希望它有所帮助...
答案 3 :(得分:0)
localhost的解决方案对我有用,谢谢。然而,我把头撞到墙上几个小时,直到我意识到我忘记将我对ScrollPane类的所有代码引用更改为引用ScrollPain类。
这是一个例子:即使在我的库中更改了ScrollPane组件的类之后,我仍然收到错误。然后我意识到,在实例化ScrollPane的类中,我需要从
更改实例化var scrollPane:ScrollPane = new ScrollPane();
说:
var scrollPane:ScrollPain = new ScrollPain ();
另外,我需要从
更改我的import语句import fl.components.ScrollPane;
说:
import com.mysite.ScrollPain;
我意识到这是一个初学者的错误。 :)