【问题标题】:ConcurrentModification Exception [duplicate]ConcurrentModification 异常 [重复]
【发布时间】:2014-01-24 20:09:45
【问题描述】:

我正在使用 vaadin 框架。我有一个绝对布局,我在该布局中添加了一些组件,现在我正在迭代绝对布局以从绝对布局中获取所有组件,同时我正在从同一个绝对布局中删除一个或多个组件。但它给了我并发修改异常。帮助我如何避免异常。要求是在迭代相同布局时从绝对布局中删除组件。

产生异常的代码:

Iterator<?> iterate = absoluteLayout.getComponentIterator();
    while (iterate.hasNext()) 
    {
        Component c = (Component) iterate.next();
        if(c instanceof Button)
        {
            Button button = (Button) c;
            if(button.getCaption().equals(""))
            {
                Long id = (Long) button.getData();
                if(id == subSystemId)
                {
                    flag = true;
                    absoluteLayout.removeComponent(button);
                    absoluteLayout.removeComponent(tempLabel);
                    absoluteLayout.removeComponent(tempOptionGroup);

                    System.out.println("Waooo!! Components has been removed fro absolute layout!!");
                }
            }
        }
        else if(c instanceof Label)
        {
            tempLabel = (Label) c;
        }
        else if(c instanceof OptionGroup)
        {
            tempOptionGroup = (OptionGroup) c;
        }
    }

例外是:

java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:394)
at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:405)
at com.medmax.Dashboard.cchpi.ROSComponent.removeRosSubSystemLogic(ROSComponent.java:401)

.......

【问题讨论】:

  • 使用iterator.remove() 删除元素。
  • 这将从迭代器中删除,而不是从 AbsoluteLayout 的原始容器中删除

标签: java vaadin


【解决方案1】:

您正在同一循环内的absoluteLayout 中进行迭代和删除。 而是尝试在while 循环之外声明tempLabeltempOptionGroupbutton 等变量。

应该能解决你的问题

【讨论】:

  • 请给我看例子?
猜你喜欢
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 2018-08-12
  • 1970-01-01
相关资源
最近更新 更多