【发布时间】:2011-07-05 23:46:24
【问题描述】:
根据运行时错误信息,异常发生在下面一行;
VirusData v = iteratorVirusDB.next();
VirusData 是一个具有构造函数和重载构造函数的类,其中包含有关数据库中每个病毒的特定信息,例如;
- 字符串 vName
- 字符串定义
重载
- 带有标记化定义的数组(以 xLength 组分隔)
- 带有 LCS 令牌的数组
- 带坡度的浮点数
<VirusData> 类型的iteratorVirusDB 是VirusDB 的.iterator(),如下所示:
Iterator<VirusData> iteratorVirusDB = virusDB.iterator();
VirusDB 是 <VirusData> 类型的 ArrayList,我在其中存储病毒对象 (此时为名称和定义),以便我以后可以使用它们。
ArrayList <VirusData> virusDB = new ArrayList<VirusData>();
最后,错误发生在使用上述所有解释的方法中:
private void selectDabataseMouseClicked(java.awt.event.MouseEvent evt) {
while(iteratorVirusDB.hasNext()) {
VirusData v = iteratorVirusDB.next(); //ERROR LINE
String vSig = v.signature;
v.tokens = tokenize.raw(vSig, true, tLength);
...
}
...
}
我真的可以就如何解决这个问题提供一些帮助和建议,以使程序成功运行。贝娄,完整的 StackTrace:
run:
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at project_clean.Main.selectDabataseMouseClicked(Main.java:275)
at project_clean.Main.access$100(Main.java:11)
at project_clean.Main$2.mouseClicked(Main.java:76)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
at java.awt.Component.processMouseEvent(Component.java:6270)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
【问题讨论】:
-
结构上修改
ArrayList时迭代器失效。将迭代器保存为成员之间的类状态是可疑的。你为什么这样做? -
我刚刚回答了一个关于 ConcurrentModificationException 的问题...stackoverflow.com/questions/5145135/…
-
好吧,我真的不知道迭代器是如何工作的,我最近才发现它们存在,所以我只是通过反复试验来学习。所以如果我理解正确,我不应该这样做
Iterator<VirusData> iteratorVirusDB = virusDB.iterator();?但是我怎么能迭代这样的东西;VirusData v = virusDB.iterator().next();?感谢您的建议 -
啊,请在 StackTrace 中使用复制+粘贴,而不是屏幕截图。
-
@Paŭlo:改了,谢谢建议
标签: java exception iterator arraylist runtime-error