Tag: 并发修改

在Java中,如何在单线程程序中抛出ConcurrentModificationException?

我正在阅读这个“ Freuqent Java并发问题 ”的问题,并且在谈论java.util.ConcurrentModificationException的答案时感到困惑。 我对答案的理解是,这可能发生在单线程程序中。 如何或什么条件导致以下代码抛出exception? List list = new ArrayList(Arrays.asList(“a”, “b”, “c”)); for (String string : list) { list.remove(string); }

如何正确地为数据结构中的图像设置动画而不是获取ConcurrentModificationException

对于那些讨厌阅读长问题的人, 请使用下面的完整代码,运行它,点击SPACE几次,然后你会得到一个ConcurrentModificationException 。 简单的问题:你如何解决它? 问题是尝试在退出屏幕时从列表中删除Fireball 。 Timer代码是问题所在。 如果您想了解更多信息,请继续阅读。 在OP询问如何射击火球图像的这个问题中,我回答了这个答案,表明应该使用数据结构来保存火球。 IMO是@ $$答案的一半。 我认为这是因为我提供的代码并不完整,因为它不考虑何时需要从数据结构中删除火球,比如当火球离开屏幕或者碰撞时与对方球员。 所以最终它只会变成一个无穷无尽的火球List ,我认为它不是有效的,也不是正确的做法。 这是我如何做到的。 有一个Fireball类可以保存火球和x和y位置的图像。 我所做的就是继续使用键绑定向List添加一个Fireball实例,并使用计时器移动Fireball的x位置进行动画处理 Timer timer = new Timer(40, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (Fireball ball : fireBalls) { ball.x += X_INC; repaint(); } } }); … getActionMap().put(“hadouken”, new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { […]

ConcurrentModificationException的

我正在使用下面的代码片段,尝试处理电子表格,需要排除ad hoc列。 我知道我正在做的粗略方式,将exception放在ArrayList中并处理每个列表中的列表并且在当前行列上的增量是不正常的,但是你知道只是完成它。 但是我得到了标题错误,我认为这应该永远不会发生。 我只是循环遍历ArrayList并进行比较,而不是修改任何东西。 错误在哪里? 有没有更好的方法来处理例外列表? ArrayList noProcess = new ArrayList(); Iterator itr00 = noProcess.iterator(); Iterator itr01 = noProcess.iterator(); noProcess.add(new Integer(“5”)); noProcess.add(new Integer(“18”)); …. boolean include=true; for(int i=0;i<archive.length;i++){ for (int j = 0; j < archive[i].length; j++) { while (itr00.hasNext()) { if (j == ( (Integer) itr00.next()).intValue()) include = false; } if (include) {…

如何解决此错误java.util.ConcurrentModificationException

我在下一行收到错误。 我正在做添加到jsonarray的过程。 请帮帮我。 jsonArr=new JSONArray(); if(req.getSession().getAttribute(“userses”)!=null){ String name=(req.getParameter(“name”)==null?””:to_EnglishName(req.getParameter(“name”).toUpperCase())); if(!name.equals(“”)){ for(Book c:GlobalObjects.bookList){ if(c.getBookName().startsWith(name)){ jsonObjec=new JSONObject(); jsonObjec.put(“label”,c.getBookName()); jsonObjec.put(“value”, c.getId()); jsonArr.add(jsonObjec);//java.util.ConcurrentModificationException } } } } jsonArr.write(res.getWriter());

Collection根据Collection的内容抛出或不抛出ConcurrentModificationException

以下Java代码按预期抛出ConcurrentModificationException : public class Evil { public static void main(String[] args) { Collection c = new ArrayList(); c.add(“lalala”); c.add(“sososo”); c.add(“ahaaha”); removeLalala(c); System.err.println(c); } private static void removeLalala(Collection c) { for (Iterator i = c.iterator(); i.hasNext();) { String s = i.next(); if(s.equals(“lalala”)) { c.remove(s); } } } } 但是下面的示例(仅在Collection的内容上有所不同)执行时没有任何exception: public class Evil { public static void […]