代码之家  ›  专栏  ›  技术社区  ›  Roger Far

AS3:动态加载图像会导致错误

  •  0
  • Roger Far  · 技术社区  · 15 年前

    我正在尝试在Flex(AS3)中加载一个已经存在的映像:

    <mx:Image id="Img"/>

    使用此代码:

    Img.load('http://www.path.com/image.jpg');

    该路径已验证有效,但我始终收到以下错误: TypeError:错误#1009:无法访问空对象引用的属性或方法。

    4 回复  |  直到 15 年前
        1
  •  1
  •   invertedSpear    14 年前

    如果图像的答案位于viewstack的隐藏子对象上,则会从其他人的角度改变问题的性质。通过将viewstack的creationPolicy更改为“all”,您实际上可以访问该viewstack子级上的项目,而无需使其可见。

        2
  •  0
  •   Ian    15 年前

    使用mx.Image标记时,请尝试使用 IMG.source=” http://path.com/image.jpg IMG.load(); 否则,您可能只需要将其设置为URL请求; 然而,空对象引用非常常见,并且可能来自许多不同的变量,在它们准备好之前,您正试图访问这些变量。 确保在flex应用程序准备就绪之前,您没有尝试访问IMG。 在代码中,在定义文档的MXML的第一行,确保有creationComplete=“init()”//或任何初始函数,然后在该函数中分配IMG源。这确保了as VAR不会试图访问mxml中定义的任何尚未就绪的内容/

        3
  •  0
  •   Christian Nunciato    15 年前

    你什么时候调用这个函数?虽然在图像控件上调用load方法不是标准做法(设置其源属性更常见),但这样做应该很好:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="onInitialize()">
    
        <mx:Script>
            <![CDATA[
    
                private function onInitialize():void
                {
                    Img.load("http://turbonerd.com/media/images/roaming/o/20100203192528.jpg");
                }
    
            ]]>
        </mx:Script>
    
        <mx:Image id="Img" />
    
    </mx:Application>
    

    不过,当您调用该方法时,它确实很重要;如果在该特定行上获得空引用,那么图像控件肯定不在那里。

    确保在尝试访问代码中的控件之前至少等待容器的初始化事件激发(如上所述)。如果在运行时动态添加控件,则应等到 控制的 初始化事件,以确保有一个要处理的对象。

        4
  •  0
  •   Roger Far    14 年前

    好的,问题是图像组件被放置在stackview上的画布上,当画布不可见时,显然无法访问这些元素