2013-11-09 10 views
5

Sto leggendo gli attributi da uno shapefile usando geotools 10.1. Non capisco perché genera un'eccezione dopo aver stampato l'attributo di tutte le funzioni.Perché questo codice come leggere uno shapefile utilizzando geotools genera questa eccezione?

Questo è il codice di esempio:

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(); 
    } 

} 

}

Eccezione:

Exception in thread "main" java.lang.IllegalArgumentException: Expected requestor [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

Sto ricevendo lo stesso errore. come si risolve? ' – shorif2000

+0

@sharif Leggi risposta contrassegnata come corretta. – angelcervera

risposta

9

E 'necessario eseguire dataStore.dispose(); prima di uscire.

+0

aggiungere, ogni volta che accedo a uno shapefile come questo, aggiungo infine un blocco per chiamare dispose(), anche se stai usando Java 7+ prova con le risorse. – markg

Problemi correlati