JAVA-java.util.ConcurrentModificationException:null Ausnahme
Arbeite ich an meinem code und immer "java.util.ConcurrentModificationException". Ich habe es gegoogelt und weiß auch, dass solche Fehler nur kommt, wenn Sie versuchen zu ändern auf-gehen iterative variable, die ich fühle mich nicht in meinem Fall. Unten ist mein code.
//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");
}
Zeigt Fehler so etwas wie :
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]
Wie es zu lösen?
- Bitte geben Sie eine Art Gegenleistung zu Menschen, die versuchen, Ihnen zu helfen und zu formatieren sowie zu einem besser lesbaren format
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf dieser Linie, wie viele andere in Ihrem code:
RepStatementsAsHash.get(uri).remove(RepTypeObject);
Sie sind, Durchlaufen die Schleife, und entfernen Sie es, während des Durchlaufs. Sie können eine Iterator zum Durchlaufen einer Liste oder Karte, und entfernen Sie dann die Elemente mithilfe deriterator.remove()
.Beispiel