zoukankan      html  css  js  c++  java
  • textLayout在快速输入清除时报错解决方法

    var tf:TextFlow;

    var len:int = tf.numChildren;
    for (var i:int = 0; i < len; i += 1)
    {
      tf.removeChildAt(0);
    }

    tf.flowComposer.composeToPosition();
    tf.flowComposer.updateAllControllers();

    TypeError: Error #1009: 无法访问空对象引用的属性或方法。
     at flashx.textLayout.edit::ParaEdit$/insertText()       flashx extLayouteditParaEdit.as:54]
     at flashx.textLayout.operations::InsertTextOperation/doInternal()   flashx extLayoutoperationsInsertTextOperation.as:196]
     at flashx.textLayout.operations::InsertTextOperation/doOperation()   flashx extLayoutoperationsInsertTextOperation.as:223]
     at flashx.textLayout.edit::EditManager/doInternal()       flashx extLayouteditEditManager.as:723]
     at flashx.textLayout.edit::EditManager/doOperation()      flashx extLayouteditEditManager.as:603]
     at flashx.textLayout.edit::EditManager/flushPendingOperations()    flashx extLayouteditEditManager.as:873]
     at flashx.textLayout.compose::StandardFlowComposer/updateToController()  flashx extLayoutcomposeStandardFlowComposer.as:554]
     at flashx.textLayout.compose::StandardFlowComposer/updateAllControllers() flashx extLayoutcomposeStandardFlowComposer.as:517]


    tf.interactionManager.selectRange(tf.textLength, tf.textLength);

    TypeError: Error #1009: 无法访问空对象引用的属性或方法。
     at flashx.textLayout.edit::ParaEdit$/insertText()       flashx extLayouteditParaEdit.as:54]
     at flashx.textLayout.operations::InsertTextOperation/doInternal()   flashx extLayoutoperationsInsertTextOperation.as:196]
     at flashx.textLayout.operations::InsertTextOperation/doOperation()   flashx extLayoutoperationsInsertTextOperation.as:223]
     at flashx.textLayout.edit::EditManager/doInternal()       flashx extLayouteditEditManager.as:723]
     at flashx.textLayout.edit::EditManager/doOperation()      flashx extLayouteditEditManager.as:603]
     at flashx.textLayout.edit::EditManager/flushPendingOperations()    flashx extLayouteditEditManager.as:873]
     at flashx.textLayout.compose::StandardFlowComposer/internalCompose()  flashx extLayoutcomposeStandardFlowComposer.as:711]
     at flashx.textLayout.compose::StandardFlowComposer/composeToPosition()  flashx extLayoutcomposeStandardFlowComposer.as:837]

    报错在ParaEdit.as,sibling为null
       var sibling:FlowElement = textFlow.findLeaf(absoluteStart);
       var siblingIndex:int;
       var paragraph:ParagraphElement = sibling.getParagraph();

    问题貌似是因为EditManager.as里insertText方法中的Event.ENTER_FRAME,这个下一帧处理好像会导致快速输入删除时候的不同步
        if (captureLevel == 0 && origOperationState == null && controller && controller.container && allowDelayedOperations)
        {
         enterFrameListener = controller.container;
         enterFrameListener.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 1.0, true);
        }
        else
         flushPendingOperations();

    我的解决方法是同步处理 不让他下一帧处理 设置 EditManager(tf.interactionManager).allowDelayedOperations = false;

    问题解决 具体为什么 还不是很清楚,先这么用着吧,如果有大神知道,希望可以交流

  • 相关阅读:
    EV录屏
    Oracle 游标详解 【转载至CSDN「鱼丸丶粗面」】
    ORACLE查询表数据占用存储空间大小(清理表碎片)
    开源项目
    Shiro 简介(认证、授权、加密、会话管理、与 Web 集成、缓存等)
    OSCHINA 公布 2019 年度最受欢迎中国开源软件
    腾讯开发者手册
    hutool JAVA 工具类
    小程序登录
    微信小程序button组件样式
  • 原文地址:https://www.cnblogs.com/xbglbc/p/3813498.html
Copyright © 2011-2022 走看看