好吧,作为一个小小的个人编程项目,我过去一直试图制作一个程序(通过GUI)来记录游戏中某些内容的项目丢失数据(如果你的话,会引发激战2)好奇)。 GUI非常简单:JFrame
包含两个JLabels
和JTextFields
,说明要输入什么,以及输入的文本字段。基本的GUI内容。输入是项目名称和金额。此外,有两个JButtons
,每个都有一个监听器来添加项目并减去项目,最后另一个JLabel
用作错误信息显示。
在TreeMap
执行java程序期间,存储项目“获取”到“获取金额”的结构。
我一直在创建一个原始的,基本的实现,将数据保存到.csv文件中的内存但我决定昨晚我想重做系统。因此,我想到了尝试“编写”电子表格格式,我想,“那么为什么不是OpenOffice?因此,我发现了ODFToolkit API等,特别是ODFDOM工具当然对我很感兴趣。所以我以为我已经重构了这些东西(如果这是正确的术语),并且事情会顺利但是......这是我的问题:
因此,在GUI中我输入一些测试输入; “烂鸡蛋”是一个有效的项目(残障人士在窗口中显示错误),我为获得的数量添加了一些正整数(只有可能的有效“数量”类型)。现在,我第一次这样做,使用这样的有效输入它工作正常,但如果我再次尝试不同的输入或相同,它会显示错误文本,只有在输入无效项目时才会显示。我尝试了一些事情,至少要通过它调试它,但我不知道这个可怕的bug是如何创建的。
我将在这里链接到我自己的两个类的pastebin:
GUI类:http://pastebin.com/rEbFS27j
其他类,即Map
结构和GUI后面的其他内容:http://pastebin.com/BWA4SUY0
答案 0 :(得分:0)
叹气我最终想通了。我在写入电子表格的方法中有这个循环。
while (it.hasNext() == true) {
Map.Entry pairs = (Map.Entry)it.next();
odt.getTableList().get(0).getCellByPosition("A" + i).setDisplayText((String) pairs.getKey()) ;
odt.getTableList().get(0).getCellByPosition("B" + i).setDisplayText((pairs.getValue().toString())) ;
it.remove(); // avoids a ConcurrentModificationException
i++ ;
}
行it.remove()
(“它”是一个Iterator变量)是一个致命错误......当我查看过去关于如何使用迭代器的东西时,复制粘贴中的一个不幸残余... :/ /确实是这种可怕的“只能工作一次”的错误的原因。猜猜我真的需要确保当我将其他人的代码片段粘贴到我的工作中时,我没有使用错误或不必要的东西......