Ich habe eine Schleife, die durch einige Eigenschaften läuft, aber innerhalb dieser Schleife müssen einige Eigenschaften hinzufügen. Die erste Iteration des Programms kann laufen, aber aus der zweiten Iteration geschieht die folgende Ausnahme:Ausnahme in Java "java.util.ConcurrentModificationException", wie zu lösen?
Exception in thread "main" java.util.ConcurrentModificationException: Iterator: started at 5, now 113
at org.apache.jena.tdb.sys.DatasetControlMRSW.policyError(DatasetControlMRSW.java:157)
at org.apache.jena.tdb.sys.DatasetControlMRSW.access$000(DatasetControlMRSW.java:32)
at org.apache.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.checkCourrentModification(DatasetControlMRSW.java:110)
at org.apache.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.hasNext(DatasetControlMRSW.java:118)
at org.apache.jena.atlas.iterator.Iter$4.hasNext(Iter.java:303)
at org.apache.jena.atlas.iterator.Iter$4.hasNext(Iter.java:303)
at org.apache.jena.atlas.iterator.Iter$4.hasNext(Iter.java:303)
at org.apache.jena.atlas.iterator.Iter.hasNext(Iter.java:908)
at org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
at org.apache.jena.util.iterator.Map1Iterator.hasNext(Map1Iterator.java:49)
at org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
at br.com.edu.dataset.ConstrucaoDataSet.main(ConstrucaoDataSet.java:110)
Java Result: 1
Methode:
public ArrayList<Topic> annotate(String originalMarkup) throws Exception {
PreprocessedDocument doc = _preprocessor.preprocess(originalMarkup);
Collection<Topic> allTopics = _topicDetector.getTopics(doc, null);
ArrayList<Topic> bestTopics = _linkDetector.getBestTopics(allTopics, 0.5);
return bestTopics;
}
.... Haupt ...
Property body = model.getProperty("http://data.linkededucation.org/ns/linked-education.rdf#body");
StmtIterator iter = model.listStatements(null, body, (RDFNode) null);
while (iter.hasNext()) {
Statement stmt = iter.nextStatement();
String uri = stmt.getSubject().toString();
String artigo = stmt.getObject().toString();
ArrayList<Topic> bestTopics = annotator.annotate(artigo);
Resource lakPaper = model.createResource(uri);
for (Topic t : bestTopics) {
lakPaper.addProperty(DC.subject, model.createResource(keyValueProperty)
.addProperty(key, t.getTitle())
.addProperty(value, _df.format(t.getWeight())));
System.out.println(" - " + t.getTitle() + "[" + _df.format(t.getWeight()) + "]");
}
}
Wie löst man dieses Problem?
Indem Sie Ihre Liste nicht gleichzeitig ändern, während Sie darüber iterieren. Java kann das nicht tun. Verwenden Sie einen Iterator. –