我创建了一个 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 并继续运行,直到它最终出现错误(循环样式)。
此外,如果我首先选择一个没有省略号 (...) 的单元格并将箭头放在有省略号的单元格上,我不会收到错误消息。只有当我最初选择一个带有(...)和箭头的单元格时,它才会出错。