我一直在为一个程序编写代码,我遇到了一些我能够正确解决的问题。但是,我的程序正在抛出ConcurrentModificationException
并且我不确定我能做什么。
我正在使用NetBeans 8.0.2编写代码来创建Java桌面应用程序(根据我的教授的要求)。 该计划的目的是管理一家酒店。因此,它有一些部分,如“客户”,“员工”和“预订”(给我带来问题的那个)。
在每个部分,我都有一个使用JTable
的{{1}}。在每个部分中,我都在使用硬盘驱动器上的文件来使更改持久化。我编写了新的客户/员工课程。现在,我正在尝试编码预订和取消预订方法。在我进入“unbooking”部分之前,一切都进展顺利。
在表格和模型之后我有一个DefaultTableModel
。在这个特定的部分,我有三个:
预订部分很好,我可以修改表格,文件和ArrayList
,没有任何错误,我的程序实际上做了应有的事情。但我无法让unbooking部分工作。它应该基本上与预订相反。
我会发布我的一小部分代码,但如果您需要了解其他任何内容或需要我的代码的更多部分,我很乐意分享它。
我的代码:
ArrayList
答案 0 :(得分:0)
ConcurrentModificationException
当你对一系列元素(列表)进行更改而你正在主动循环遍历所述链时会发生。
我经常遇到它并且总是通过反向循环遍历列表来解决它,这样你就可以向后循环,如果你想要的话你可以更改或删除元素而不会弄乱链(列表)你'重新循环。
我会为您提供代码,但我发现很难读取您的代码,所以现在必须这样做。
希望这会有所帮助并祝你好运!
答案 1 :(得分:0)
如果自上次使用迭代器后,您正在迭代的Collection
的内容已经更改,则在尝试使用或重用它时会出现异常。创建一个新的 - 作为一般规则,don't reuse an iterator。
你是:
您应该在创建迭代器之前修改列表。
此外,您应该尝试minimize the scope of local variables。
相反:
Iterator<String> someIterator = strings.iterator();
while (someIterator.hasNext()) {
doSomething();
}
您应该这样做:
for (Iterator<String> iter = strings.iterator(); iter.hasNext();) {
doSomething();
}
当然,如果您(如您所说)不需要修改列表,请使用for-each循环:
for (String s : strings) {
doSomething();
}
一些不相关的观点: