首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConcurrentModificationException JavaFX

ConcurrentModificationException JavaFX
EN

Stack Overflow用户
提问于 2017-07-21 03:02:22
回答 1查看 1.4K关注 0票数 1

我对javaFX图形用户界面有这个问题...我想在按下按钮时验证是否没有空窗格,否则添加一个新窗格。但每次我拿到ConcurrentModificationException。我尝试过print,我发现这里只执行了for的第一部分,而没有执行其他部分。

代码语言:javascript
复制
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());
                    }
                });
EN

回答 1

Stack Overflow用户

发布于 2017-07-21 03:13:56

在for each循环中遍历vbox的子节点列表,同时在循环主体中删除该列表中的节点。然后,迭代器通知列表状态已更改,因此抛出ConcurrentModificationException,因为它无法跟踪更改并保证迭代以有序的方式发生。这类迭代器被称为快速失效迭代器。

更好的方法是收集您想要删除的节点,并在完成列表迭代后删除它们。

代码语言:javascript
复制
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());
            }
        });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45223227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档