ListBase.as源代码级的一个问题?会死循环?是否官方bug?

黄传通 2009-05-04 01:16:54
file: ListBase.as
function:setSelectionDataLoop
line: 6338

我在调用 tree.selectedItem = obj as XML; 时就会进入以下代码,在特定情况下就会出现死循环,或叫15秒超时。



src:


while (items.length && !collectionIterator.afterLast) // 此处会出现 死循环e,此时collectionIterator.beforeFrist = true
//collectionIterator.afterLast = false;
{
....
....

collectionIterator.moveNext(); ///这个函数可能改变两个值:beforeFrist ,afterLast
// in line 6372,, will set collectionIterator.afterLast = false, or
// set collectionIterator.beforeFrist = true;
// but line: 6338 whie( ! afterLast ) ??? why??
}




in line: 6338 why not:

while (items.length && !collectionIterator.afterLast && !collectionIterator.beforeFrist )
{
....
....
....
}
...全文
249 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄传通 2009-05-19
  • 打赏
  • 举报
回复
去官方提交bug,结果:
http://bugs.adobe.com/jira/browse/SDK-21007
listart 2009-05-12
  • 打赏
  • 举报
回复
这段代码是没有问题的:
while (items.length && !collectionIterator.afterLast)
items.length表示容器中存在对象
!collectionIterator.afterLast 表示游标不再最后一个元素之后
循环体中collectionIterator.moveNext();将游标往后移,并非往前移
所以不需要再用!collectionIterator.beforeFrist作判断
同时,该段代码调用条件是函数setSelectionDataLoop的useFind参数为false
你说出现死循环,导致问题的地方应该不是此处。

tttk 2009-05-10
  • 打赏
  • 举报
回复
楼主好强,这样的bug也能被发现。

你提的问题有道理,但一个afterLast不是已经足够清楚了吗?难道还非要说明!beforeFirst?
herowach 2009-05-04
  • 打赏
  • 举报
回复
貌视没遇到过,你写个会造成死循环的小程序帖上来看看。
黄传通 2009-05-04
  • 打赏
  • 举报
回复
C:\Program Files\Adobe\Flex Builder 3\sdks\3.1.0\frameworks\projects\framework\src\mx\controls\listClasses\ListBase.as

完整路径
黄传通 2009-05-04
  • 打赏
  • 举报
回复
补充:
ListBase.as是官方的库。AS3

4,328

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧