android studio运行报错,geotools中的org.geotools.util.factory类缺失

使用Android studio写程序时需要实现一个解析shp文件的功能,用到了geotools和jts第三方库,运行程序后,点击解析shp文件功能的按钮会导致应用停止运行,看run报错内容如下:

E/AndroidRuntime: FATAL EXCEPTION: pool-3-thread-1
    Process: com.example.mygis, PID: 3953
    java.lang.NoClassDefFoundError: org.geotools.util.factory.StrictHints$Empty
        at org.geotools.util.factory.FactoryFinder.<clinit>(FactoryFinder.java:31)
        at org.geotools.factory.CommonFactoryFinder.getFilterFactory(CommonFactoryFinder.java:301)
        at org.geotools.data.store.ContentDataStore.<init>(ContentDataStore.java:147)
        at org.geotools.data.shapefile.ShapefileDataStore.<init>(ShapefileDataStore.java:120)
        at com.example.mygis.MainActivity.lambda$downloadAndDrawShapeFile$4$MainActivity(MainActivity.java:741)
        at com.example.mygis.-$$Lambda$MainActivity$jLhrKFHE7F-ov_kbqSD2g7pKoMI.run(lambda)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)


根据提示内容,是缺少org.geotools.util.factory.StrictHints$Empty,但是用解压缩软甲打开下载的gt-metadata.jar能看到有这个类。

img


求解,这个问题确实解决不了了。

以下回答参考GPT并且由Bony-整理:

根据您提供的信息,可能是类加载器在加载 geotools 库时出现了问题。以下是一些可能的解决方案:

  1. 确保您已正确地导入了 geotools 和 jts 库。您可以通过在 gradle 文件中添加以下依赖项来实现这一点:
implementation 'org.geotools:gt-shapefile:24.1'
implementation 'com.vividsolutions:jts-core:1.16.0'

请注意,版本号可能会因库的版本而异。

  1. 确保您没有重复地添加了 geotools 库。如果您已经在项目中添加了 geotools 依赖项,但又手动添加了该库的 jar 文件,则可能会导致类加载冲突。

  2. 尝试使用不同的类加载器加载库。您可以尝试使用不同的类加载器加载库,以避免冲突。例如,您可以尝试使用以下代码:

URL[] urls = new URL[] { new URL("file:///path/to/geotools.jar") };
ClassLoader cl = new URLClassLoader(urls);
Class<?> cls = cl.loadClass("org.geotools.util.factory.StrictHints$Empty");

请将“/path/to/geotools.jar”替换为实际的 geotools 库路径。

希望这些解决方案能够帮助您解决问题。