显而易见的解释是您已经修改了
virusDB两次调用之间的时间。使用迭代器进行迭代时,不得修改向量(通过
Iterator/
ListIterator方法除外)。
此代码段将 始终 抛出
ConcurrentModificationException:
import java.util.*;class VirusData {}public class Test { public static void main(String[] args) { List<VirusData> list = new ArrayList<VirusData>() {{ add(new VirusData()); add(new VirusData()); add(new VirusData()); }}; Iterator<VirusData> iterator = list.iterator(); iterator.next(); list.remove(0); VirusData s = iterator.next(); }}从以下文档中
ConcurrentModificationException:
例如,通常不允许一个线程修改Collection而另一个线程对其进行迭代。
通常,在这些情况下,迭代结果是不确定的。如果检测到此行为,则某些Iterator实现(包括JRE提供的所有通用集合实现的实现)可能会选择抛出此异常。执行此操作的迭代器称为快速失败迭代器,因为它们会快速干净地失败,而不是在未来的不确定时间内冒任意,不确定的行为的风险。请注意,此异常并不总是表示对象已被其他线程同时修改。 如果单个线程发出违反对象约定的方法调用序列,则该对象可能会抛出此异常。
例如,如果线程在使用快速失败迭代器迭代集合时直接修改了集合,则迭代器将抛出此异常。
如果您打算在每次调用该方法时都对整个数据库进行迭代,那么我建议您这样做
private void selectDabataseMouseClicked(java.awt.event.MouseEvent evt) { Iterator<VirusData> iteratorVirusDB = virusDB.iterator(); while(iteratorVirusDB.hasNext()) { VirusData v = iteratorVirusDB.next(); String vSig = v.signature;


