-1

好的,作为一个小的个人编程项目,我过去一直在尝试制作一个程序,该程序将(通过 GUI)保存以记录游戏中某些东西的物品掉落数据(如果你很好奇,请参阅激战 2) . GUI 很简单:JFrame包含两个JLabelsJTextFields以及要输入的内容,以及要输入的文本字段。基本的 GUI 内容。输入是项目名称和金额。此外,还有两个JButtons,每个都有一个侦听器来添加项目和减去项目,最后一个JLabel用于显示错误消息。

在执行 java 程序期间,将项目“映射”到所获得的金额的结构存储在TreeMap.

我一直在创建一个粗略的基本实现,将数据保存在 .csv 文件中的内存中,但我昨晚决定要重新设计系统。因此,我产生了尝试“写入”电子表格格式的想法,我想,“为什么不使用 OpenOffice?因此,我发现了 ODFToolkit API 等,特别是 ODFDOM 工具,我当然很感兴趣。所以我原以为我已经对这些东西进行了足够好的重构(如果这是正确的术语),并且事情会进展顺利,但是......这是我的问题:

因此,在 GUI 中我输入了一些测试输入;“臭鸡蛋”是一个有效的项目(无效项会在窗口中显示错误),我为获得的金额输入了一些正整数(仅可能是有效“金额”的类型)。现在,我第一次这样做时,使用像这样的有效输入它可以正常工作,但是如果我再次尝试使用不同的输入或相同的输入,它会显示错误文本,该错误文本应仅在输入无效项目时显示。我至少尝试了一些东西来调试它,但我不知道这个可怕的错误是如何产生的。

我将在这里为我自己的两个类链接到 pastebin:
GUI 类: http: //pastebin.com/rEbFS27j
其他类,即MapGUI“背后”的结构和其他东西:http: //pastebin.com/BWA4SUY0

4

1 回答 1

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()(“it”是一个迭代器变量)是一个致命错误......当我过去查找有关如何使用迭代器的资料时,一个不幸的复制粘贴残余......:/确实是原因这种可怕的“只能工作一次”的错误。我想当我将别人的代码片段粘贴到我的工作中时,我真的需要确保我没有使用错误或不必要的东西......

于 2013-06-19T05:00:28.667 回答