我对javaFX图形用户界面有这个问题...我想在按下按钮时验证是否没有空窗格,否则添加一个新窗格。但每次我拿到ConcurrentModificationException。我尝试过print,我发现这里只执行了for的第一部分,而没有执行其他部分。
enter code here
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
for (Node node : vbox.getChildren()) {
if (node instanceof Pane){
Pane pane = (Pane) node ;
if (pane.getChildren().isEmpty()){
vbox.getChildren().remove(node);
}
}``
}
drugrow drug = new drugrow();
vbox.getChildren().addAll(drug.getPane());
}
});发布于 2017-07-21 03:13:56
在for each循环中遍历vbox的子节点列表,同时在循环主体中删除该列表中的节点。然后,迭代器通知列表状态已更改,因此抛出ConcurrentModificationException,因为它无法跟踪更改并保证迭代以有序的方式发生。这类迭代器被称为快速失效迭代器。
更好的方法是收集您想要删除的节点,并在完成列表迭代后删除它们。
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
final List<Node> removalCandidates = new ArrayList<>();
for (Node node : vbox.getChildren()) {
if (node instanceof Pane){
Pane pane = (Pane) node ;
if (pane.getChildren().isEmpty()){
removalCandidates.add(node);
}
}
}
vbox.getChildren().removeAll(removalCandidates);
drugrow drug = new drugrow();
vbox.getChildren().addAll(drug.getPane());
}
});https://stackoverflow.com/questions/45223227
复制相似问题