JAVA java.util.ConcurrentModificationException:null异常

时间:2015-02-16 04:11:24

标签: java exception concurrentmodification

我正在处理我的代码并获取“java.util.ConcurrentModificationException”。我用谷歌搜索它,并且知道只有在你尝试修改正在进行的迭代变量时才会出现这种错误,我觉得这种情况并不存在。以下是我的代码。

// This line is having an error
for(Statement s: _mConsumableStatements)
    {
        System.out.println("s:"+s);

        Boolean isConflict=false;
        Resource uri=s.getSubject();

        System.out.println("uri:"+uri);
        System.out.println("1");

        if(RepStatementsAsHash.containsKey(uri))
        {
            System.out.println("2");

            if(RepStatementsAsHash.get(uri).containsKey(RDFS.LABEL))
                RepStatementsAsHash.get(uri).remove(RDFS.LABEL);
            else if(RepStatementsAsHash.get(uri).containsKey(RDFS.SUBCLASSOF))
                RepStatementsAsHash.get(uri).remove(RDFS.SUBCLASSOF);
            else if(RepStatementsAsHash.get(uri).containsKey(RDFS.RANGE))
                RepStatementsAsHash.get(uri).remove(RDFS.RANGE);
            else if(RepStatementsAsHash.get(uri).containsKey(RDF.TYPE))
            {
                System.out.println("2.1");

                Value RepTypeObject=RepStatementsAsHash.get(uri).get(RDF.TYPE);
                Value ConsumableTypeObject=CStatements.get(uri).get(RDF.TYPE);

                if (RepTypeObject.stringValue().equals(OWL.CLASS) || RepTypeObject.stringValue().equals(RDFS.CLASS))
                {
                    if(ConsumableTypeObject.stringValue().equals(OWL.DATATYPEPROPERTY) || ConsumableTypeObject.stringValue().equals(OWL.OBJECTPROPERTY) || ConsumableTypeObject.stringValue().equals(RDF.PROPERTY))
                    {
                        isConflict=true;
                        //_mConflictingStatements.add(s);
                    }
                    else
                    {
                        RepStatementsAsHash.get(uri).remove(RepTypeObject);
                    }
                }
                else if(RepTypeObject.stringValue().equals(OWL.DATATYPEPROPERTY) || ConsumableTypeObject.stringValue().equals(OWL.OBJECTPROPERTY) || RepTypeObject.stringValue().equals(RDF.PROPERTY))
                {
                    if (ConsumableTypeObject.stringValue().equals(OWL.CLASS) || ConsumableTypeObject.stringValue().equals(RDFS.CLASS))
                    {
                        isConflict=true;
                        //_mConflictingStatements.add(s);
                    }
                    else
                    {

                    }
                }
                else
                {
                    if( !(RepTypeObject.stringValue().equals(OWL.DATATYPEPROPERTY) || ConsumableTypeObject.stringValue().equals(OWL.OBJECTPROPERTY) || RepTypeObject.stringValue().equals(RDF.PROPERTY) || ConsumableTypeObject.stringValue().equals(OWL.CLASS) || ConsumableTypeObject.stringValue().equals(RDFS.CLASS))  )
                    {
                        if(RepTypeObject.stringValue()!=ConsumableTypeObject.stringValue())
                        {
                            isConflict=true;
                        }

                    }
                }
                System.out.println("2.2");
                if(!isConflict)
                    {
                        addStatementsInRepository(uri.stringValue(),c_import);
                    }
            } // LABEL-TYPE 
        }
        else // No  URI Conflict
            addStatementsInRepository(uri.stringValue(),c_import);

        System.out.println("3");
    }

显示的错误如下:

11:13:24.405 ERROR - error while importing Sesame data:
java.util.ConcurrentModificationException: null
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) ~[na:1.7.0_71]
    at java.util.ArrayList$Itr.next(ArrayList.java:831) ~[na:1.7.0_71]
    at org.apache.marmotta.platform.core.services.importer.rdf.RDFImporterImpl.importData2(RDFImporterImpl.java:433) [ulysses-core-1.0-alpha-2.jar:1.0-alpha-2]

如何解决?

1 个答案:

答案 0 :(得分:1)

在这一行中,与代码中的许多其他代码一样:RepStatementsAsHash.get(uri).remove(RepTypeObject);,您正在循环遍历循环,并在迭代时将其删除。您可以使用Iterator遍历列表或地图,然后使用iterator.remove()删除元素。

Example