0

我创建了一个 GWT DataGrid(它本质上就像一个单元格表)并且遇到了一个非常奇怪的错误。

java.lang.IllegalStateException: A possible infinite loop has been detected in a Cell
Widget. This usually happens when your SelectionModel triggers a SelectionChangeEvent 
when SelectionModel.isSelected() is called, which causes the table to redraw continuously.

我在网上搜到的这个错误信息很少,而且完全不影响前端,实际上是完美的。然而,当特定情况发生时,它仍然会在 Eclipse 中出错。

如何重现错误:

- 选择特定的过滤器(无法确定为什么它不会对每个列过滤器始终出错)

- 选择包含用 (...) 隐藏的数据的单元格,然后键入左或右键盘箭头。CSS 起作用,因此当用户将鼠标悬停在单元格上时,行高会扩展并显示所有文本。)

是什么导致/修复了错误:

该错误似乎来自代码行:

myDataTable.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELCTION);

当我将此行注释掉时,错误不再发生。问题是不需要该功能,因为键盘选择与鼠标选择是分开的,并且存在整个“3 活动状态”问题。

关于我的代码:

我在用:

-单选模型

-DoubleClick DOM 处理程序

-SelectionChangeEvent.Handler(即使注释掉,错误仍然显示)

更新的 更多信息:

当我在调试器中进行操作时,它只是不断调用 onSelectionChange 5 次,然后出错。然后,就像我说的那样,如果我删除 SelectionChange 处理程序,它将不会在我的文件中遇到任何断点,但会再次转到 GWT 文件 HasDataPresenter.Class 并继续运行,直到它最终出现错误(循环样式)。

此外,如果我首先选择一个没有省略号 (...) 的单元格并将箭头放在有省略号的单元格上,我不会收到错误消息。只有当我最初选择一个带有(...)和箭头的单元格时,它才会出错。

4

1 回答 1

0

由于您没有提供任何代码,我不得不猜测。

您设置/隐藏省略号的方式会触发重绘表格。反过来,这会触发选择事件(选择相同的单元格)。一旦选择了一个单元格,它就会触发另一个表格重绘等。

于 2014-03-24T23:25:05.860 回答