A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高梦晓 中级黑马   /  2013-4-18 13:19  /  1570 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:


  1. /**
  2. * 被打的人
  3. *
  4. * @author zhaozhantao@21cn.com
  5. *
  6. */
  7. public class ManBall extends Spirit {

  8.        

  9.         /**
  10.          * 能被碰撞的东西
  11.          */
  12.         private List<Collideable> collideables = new ArrayList<Collideable>();

  13.        
  14.         @Override
  15.         public void move(float x, float y) {
  16.                 if (collideListener != null) {
  17.                         synchronized (collideables) {
  18.                                
  19.                                 if (collideables != null) {
  20.                                         for (Collideable collideable : collideables) {
  21.                                                 if (collideable.checkCollide(this, (int) x, (int) y)) {
  22.                                                         CollideEvent collideEvent = new CollideEvent();
  23.                                                         collideEvent.setCollideable(collideable);
  24.                                                         collideListener.onCollide(collideEvent);
  25.                                                 }
  26.                                         }
  27.                                 }
  28.                         }
  29.                 }
  30.                 super.move(x, y);
  31.         }
  32.        
  33.         /**
  34.          * 添加一个要被检测的可碰撞的东西
  35.          *
  36.          * @param collideable
  37.          */
  38.         public void addCollideable(Collideable collideable) {
  39.                 synchronized (collideables) {
  40.                         collideables.add(collideable);
  41.                 }
  42.         }
  43.         /**
  44.          * 删除一个要被检测的可碰撞的东西
  45.          *
  46.          * @param collideable
  47.          */
  48.         public void removeCollideable(Collideable collideable) {
  49.                 synchronized (collideables) {
  50.                         collideables.remove(collideable);
  51.                 }
  52.         }

  53.        
  54. }


复制代码
三个主要的方法,分别是move,add,remove

move里面遍历了这个集合
add和remove分别是对这个集合的增加删除操作
我都加了synchronized (collideables)
不知道是不是这样写,反正是执行remove的时候报了这样的一个错
java.util.ConcurrentModificationException

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 曹德君 于 2013-4-26 09:48 编辑

代码不全。能补全代码不,调用看看。这个异常是,当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马