【发布时间】:2020-11-17 11:35:24
【问题描述】:
我试图用 JavaFX 矩形删除 行 JavaFX GridPane,但我没有办法这样做,只能将上面的方块复制到下面的一行。这是我的代码,但它不断抛出 ConcurrentModificationAcception。
static void copyAbove(int rowToBeDisappear, GridPane mainGrid) {
for (int y = (rowToBeDisappear-1); 0 <= y ; y--) {
for (int x = 0; x <= 9; x++) {
Iterator<Node> iterator = mainGrid.getChildren().iterator();
while (iterator.hasNext()) {
Node sqr = iterator.next();
if (sqr == getSqrByIndex(x,y,mainGrid)) {
iterator.remove();
mainGrid.add(sqr,x,(y+1));
}
}
}
}
}
错误
引起:java.util.ConcurrentModificationException 在 com.sun.javafx.collections.VetoableListDecorator$VetoableIteratorDecorator.checkForComodification(VetoableListDecorator.java:714) 在 com.sun.javafx.collections.VetoableListDecorator$VetoableIteratorDecorator.hasNext(VetoableListDecorator.java:682) 在 Main.copyAbove(Main.java:%local_code_row_nvm_this%)
【问题讨论】:
-
iterator的非并发集合具有fail-fast机制(如for-each)。 -
使用
ListIterator允许您在迭代期间添加(通过迭代器) -
这闻起来很像 xy 问题(试图删除一行 GridPane),从你的 sparce 描述来看,它看起来就像删除给定行中的所有节点应该做你需要什么。请提供minimal reproducible example 说明您真正 正在努力实现的目标以及没有按预期工作的确切内容。
标签: java javafx iterator gridpane observablelist