使用 jbpm时,查找需要singal的task时代码如下,
Iterator it1=collect.iterator(); while(it1.hasNext()){ TaskInstance taskInstance=(TaskInstance)it1.next(); //在该行处报异常。 Set actorSet = taskInstance.getPooledActors(); Iterator iterator = actorSet.iterator(); while(iterator.hasNext()){ PooledActor poolAct = (PooledActor)iterator.next(); if((""+userId).equals(poolAct.getActorId()) &&!taskInstance.hasEnded() ){ Set set = taskInstance.getToken().getNode().getArrivingTransitions(); taskInstance.end(); } } }
在网上查找到,
一个Collection进行遍历(iteration)同时,对这个Collection里面的元素(element)进行做修改时,就会抛出 java. util. ConcurrentModificationException. 故将代码修改为如下: //Iterator it1=collect.iterator(); //修改1 Object[] objs = collect.toArray(); for(int j=0;j<objs.length;j++){ // while(it1.hasNext()){ //修改2 TaskInstance taskInstance=(TaskInstance)objs[j]; Set actorSet = taskInstance.getPooledActors(); Iterator iterator = actorSet.iterator(); while(iterator.hasNext()){ PooledActor poolAct = (PooledActor)iterator.next(); if((""+userId).equals(poolAct.getActorId()) &&!taskInstance.hasEnded() ){ Set set = taskInstance.getToken().getNode().getArrivingTransitions(); taskInstance.end(); } } } 经测试通过。