2013-11-09 4 views
5

geotools 10.1을 사용하여 shapefile에서 속성을 읽습니다. 모든 기능을 인쇄 한 후에 예외가 throw되는 이유를 알 수 없습니다. 왜이 코드를 사용하면 geotools를 사용하여 셰이프 파일을 읽는 것이이 예외를 throw합니까?

은 예제 코드입니다 :

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 [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

동일한 오류가 발생합니다. 어떻게 해결합니까? ' – shorif2000

+0

@sharif 답변을 올바르게 읽었습니다. – angelcervera

답변

9

그것은 종료하기 전에 dataStore.dispose();을 실행할 필요가있다.

+0

을 추가하면 언제든지이 셰이프 파일에 액세스 할 수 있습니다. 자바 7+를 사용해도 리소스가있는 try finally()를 호출하여 추가 할 수 있습니다. – markg