根據運行時錯誤消息,異常發生在以下行中;迭代時發生Java「ConcurrentModificationException」運行時錯誤。()
VirusData v = iteratorVirusDB.next();
VirusData
是一個構造函數和含有約每一個在數據庫中,如病毒的特定信息的重載的構造的類;
- 字符串VNAME
- 字符串vDefinition
與
- 陣列與記號化定義(在xLength的基團隔開)
- 陣列與LCS令牌重載
- 浮動用級
<VirusData>
類型的iteratorVirusDB
是VirusDB
()的.iterator,如圖所示波紋管:
Iterator<VirusData> iteratorVirusDB = virusDB.iterator();
VirusDB
是和<VirusData>
類型的ArrayList其中I存儲病毒對象(此時名稱和def)以便我可以稍後使用它們。
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);
...
}
...
}
我真的可以做到對如何一些幫助和建議要解決這個問題才能讓程序成功運行。貝婁,完整堆棧跟蹤:
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'時,迭代器變得無效。將迭代器保存爲成員之間的類狀態是可疑的。你爲什麼這樣做? – rlibby 2011-02-28 18:46:54
我剛剛回答了一個關於ConcurrentModificationException的問題... http://stackoverflow.com/questions/5145135/java-util-concurrentmodificationexception-on-arraylist/5145156#5145156 – 2011-02-28 18:49:32
嗯,我真的不知道迭代器是如何工作的我有隻是最近才發現它們存在,所以我只是通過反覆試驗來學習。所以如果我正確理解你,我不應該這樣做'迭代器 iteratorVirusDB = virusDB.iterator();'?但是,我怎樣才能迭代這樣的東西; 'VirusData v = virusDB.iterator()。next();'?感謝您的建議 –
Carlos
2011-02-28 18:54:33