SHP开头:数据存储区DataStoreFactorySpi不是ImageIO SPI类

1 java datastore shapefile javax.imageio java-9

在学校,我必须创建一个API,在其中我需要一个shapefile内的几何图形。我使用geotools librairie打开shapefile。这是我的代码:

public class main {

    public static void main(String[] args) throws Exception{
        String filepath = "SHP_test/testSHPindex.shp";
        File shp = new File(filepath);

        Map<String, URL> map = new HashMap<String, URL>();
        map.put( "url", shp.toURI().toURL() );
        DataStore dataStore = DataStoreFinder.getDataStore(map);


        SimpleFeatureSource featureSource = dataStore.getFeatureSource(dataStore.getTypeNames()[0]);        
        SimpleFeatureCollection collection = featureSource.getFeatures();


}
Run Code Online (Sandbox Code Playgroud)

我得到这个错误:

Exception in thread "main" java.lang.IllegalArgumentException: org.geotools.data.DataStoreFactorySpi is not an ImageIO SPI class
    at java.desktop/javax.imageio.spi.ServiceRegistry.checkClassAllowed(ServiceRegistry.java:745)
    at java.desktop/javax.imageio.spi.ServiceRegistry.<init>(ServiceRegistry.java:140)
    at org.geotools.factory.FactoryRegistry.<init>(FactoryRegistry.java:155)
    at org.geotools.factory.FactoryCreator.<init>(FactoryCreator.java:91)
    at org.geotools.data.DataStoreFinder.getServiceRegistry(DataStoreFinder.java:128)
    at org.geotools.data.DataStoreFinder.getAvailableDataStores(DataStoreFinder.java:115)
    at org.geotools.data.DataStoreFinder.getDataStore(DataStoreFinder.java:87)
    at org.ensg.projetperso.llb.maven.api.spatialindexingtest.testshapefile.main.main(main.java:30)
Run Code Online (Sandbox Code Playgroud)

数据存储区不希望被创建,我不知道它是从哪里来的……您能帮我吗?提前致谢 ..

劳尔

har*_*ldK 6

这似乎是GeoTools中的一个已知问题,请参阅Java 9兼容性的FactoryRegistry重构。从问题:

TL; DR:org.geotools.factory.FactoryRegistryextends javax.imageio.spi.ServiceRegistry,但是在Java 9上,如果由非JDK类扩展,则后者会引发异常。这会破坏Java 9上的GeoTools

您需要将GeoTools版本升级到与Java 9兼容的版本(首选),或者将Java“降级”到Java 8。

  • 正确,需要更改GeoTools才能使用ServiceLoader。 (2认同)