【问题标题】:Error 1009 in AS3AS3 中的错误 1009
【发布时间】:2011-08-05 08:43:30
【问题描述】:

我有一个名为 inputWord 的 TextField 实例,它在第一帧上不包含任何文本。在同一帧上,在动作层上,任何时候当我以任何方式引用 inputWord 时,都会出现错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at DC/frame1()[DC::frame1:19] //DC is the name of document class that I created.
at flash.display::MovieClip/gotoAndStop()
at DC()[C:\Users\nikkka\Desktop\flash\DC.as:25]

19 是涉及 inputWord 的代码所在的行数。它有效,我的意思是我写 inputWord.text = "smth"

它的文本变成“smth”,但有同样的错误。为什么?

【问题讨论】:

  • 你确定组件已经渲染了吗?
  • 很遗憾您使用的是 Flash 而不是 Flex。在 Flex 中,您可以侦听 CREATION_COMPLETE 事件,但由于您使用的是 Flashm,因此您可以使用 Timer 类或 setTimeout(..) 函数来检查组件是否稍后会呈现。
  • 已解决。这有什么奇怪的。我在框架的开头有stop()。我把它移到最后,一切正常。 Wounder,这是为什么呢?...

标签: actionscript-3 oop textfield


【解决方案1】:

问题在于 gotoAndStop()

在 as2 中,当您执行 gotoAndStop 时,您可以立即访问框架中的资源,正如 Kevin 指出的那样,必须先渲染框架

为此,您需要在渲染帧时使用 onrender 侦听器来触发以处理与帧相关的逻辑。然后,您需要使阶段无效,以强制触发渲染。

像这样:

stage.addEventListener(Event.RENDER, onRenderStage);
protected function onRenderStage(ev:Event):void {
    inputWord.text = "smth"
    trace(inputWord.text);
}
gotoAndStop(5);
stage.invalidate();

【讨论】:

    【解决方案2】:

    可能在第一帧,inputWord 还没有加载,所以你得到一个错误。在接下来的帧中,它被加载,因此文本被成功设置。解决方案是在设置之前测试文本字段是否存在:

    if (this.inputWord) this.inputWord.text = "smth";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-20
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      相关资源
      最近更新 更多