2013-11-09 8 views
5

Ich lese Attribute aus einem Shapefile mit Geotools 10.1. Ich verstehe nicht, warum eine Ausnahme nach Drucken aller Features Attribut ausgelöst.Warum löst dieser Code, wie ein Shapefile mit geotools liest, diese Ausnahme aus?

Dies ist der Beispielcode:

import java.io.File; 
import java.io.IOException; 
import java.io.Serializable; 
import java.util.HashMap; 
import java.util.Map; 

import org.geotools.data.DataStore; 
import org.geotools.data.DataStoreFinder; 
import org.geotools.data.FeatureSource; 
import org.geotools.feature.FeatureCollection; 
import org.geotools.feature.FeatureIterator; 
import org.opengis.feature.simple.SimpleFeature; 

public class LayerBusinessTest { 


public static void main(String[] args) throws IOException { 

    File file = new File("../../setup/test/shp/sscc/SSCC2010_WGS84.shp"); 
    Map<String, Serializable> map = new HashMap<>(); 
    map.put("url", file.toURI().toURL()); 

    DataStore dataStore = DataStoreFinder.getDataStore(map); 
    String typeName = dataStore.getTypeNames()[0]; 

    FeatureSource source = dataStore.getFeatureSource(typeName); 

    FeatureCollection collection = source.getFeatures(); 
    FeatureIterator<SimpleFeature> results = collection.features(); 
    try { 
     while (results.hasNext()) { 
      SimpleFeature feature = (SimpleFeature) results.next(); 
      String code = feature.getAttribute("Codigo_SSC").toString(); 
      System.out.println(code); 
     } 
    } finally { 
     results.close(); 
    } 

} 

}

Ausnahme:

Exception in thread "main" java.lang.IllegalArgumentException: Expected requestor org.geotools.data.shapefile.dbf.[email protected] to have locked the url but it does not hold the lock for the URL 
    at org.geotools.data.shapefile.files.ShpFiles.unlockRead(ShpFiles.java:429) 
    at org.geotools.data.shapefile.files.FileChannelDecorator.implCloseChannel(FileChannelDecorator.java:149) 
    at java.nio.channels.spi.AbstractInterruptibleChannel.close(AbstractInterruptibleChannel.java:115) 
    at org.geotools.data.shapefile.dbf.DbaseFileReader.close(DbaseFileReader.java:279) 
    at org.geotools.data.shapefile.ShapefileFeatureReader.close(ShapefileFeatureReader.java:248) 
    at org.geotools.data.store.ContentFeatureCollection$WrappingFeatureIterator.close(ContentFeatureCollection.java:154) 
    at LayerBusinessTest.main(LayerBusinessTest.java:39) 
+0

Ich erhalte den gleichen Fehler. wie lösen Sie auf? ' – shorif2000

+0

@sharif Lesen Sie die Antwort als richtig markiert. – angelcervera

Antwort

9

Es ist dataStore.dispose(); vor Abfahrt erforderlich auszuführen.

+0

hinzuzufügen, jederzeit, wenn ich auf eine Shapefile wie diese zugreifen, füge ich einen finally-Block zu Aufruf dispose(), auch wenn Sie Java 7+ verwenden versuchen mit Ressourcen. – markg

Verwandte Themen