Почему этот код при чтении шейп-файла с помощью геоинструментов выдает это исключение?

Я читаю атрибуты из шейп-файла с помощью геоинструментов 10.1. Я не понимаю, почему выдает исключение после атрибута печати всех функций.

Это пример кода:

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

}

}

Исключение:

Exception in thread "main" java.lang.IllegalArgumentException: Expected requestor org.geotools.data.shapefile.dbf.DbaseFileReader@2ac9b619 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)

person angelcervera    schedule 09.11.2013    source источник
comment
Я получаю эту же ошибку. как вы решаете?   -  person shorif2000    schedule 06.06.2014
comment
@sharif Прочитать ответ, отмеченный как правильный.   -  person angelcervera    schedule 06.06.2014


Ответы (1)


Необходимо выполнить dataStore.dispose(); перед выходом.

person angelcervera    schedule 09.11.2013
comment
чтобы добавить, каждый раз, когда я обращаюсь к такому шейп-файлу, я добавляю блок finally для вызова dispose(), даже если вы используете Java 7+ try с ресурсами. - person markgiaconia; 21.07.2017
comment
Это интересно, потому что я использовал старую версию (15.1), и это не требовалось. Но когда я переключился на 20.0, я начал получать ошибку ОП. Спасибо ангелсервера! - person T Sloane; 08.10.2020