ConcurrentModificationException
выброшено, потому что вы перебираете дочерний список chunkLarge
и одновременно удаляете из него элементы.
Удаление происходит при попытке добавить дочерний узел к chunkLarge2
- у узла javafx может быть только один родительский элемент, поэтому дочерний узел n
является удаленным из chunkLarge
'Сначала список детей, а затем он добавляется в список детей chunkLarge2
.
Как вы уже сказали, вы можете использовать итератор для решения проблемы:
Iterator<Node> it = chunkLarge.getChildren().iterator();
while (it.hasNext()) {
// get the next child node
Node node = it.next();
int column = GridPane.getColumnIndex(node);
int row = GridPane.getRowIndex(node);
// remove method is used to safely remove element from the list
it.remove();
// node is already removed from chunkLarge,
// so you can add it to chunkLarge2 without any problems
chunkLarge2.add(node, column, row);
}
Или без итератора:
// transfer children from chunkLarge to chunkLarge2
chunkLarge2.getChildren().addAll(chunkLarge.getChildren());
// note that you're not iterating over chunkLarge's children list
// (addAll method will make a copy and work with it),
// so it's safe to let the children be automatically deleted