使用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能看到有这个类。
以下回答参考GPT并且由Bony-整理:
根据您提供的信息,可能是类加载器在加载 geotools 库时出现了问题。以下是一些可能的解决方案:
implementation 'org.geotools:gt-shapefile:24.1'
implementation 'com.vividsolutions:jts-core:1.16.0'
请注意,版本号可能会因库的版本而异。
确保您没有重复地添加了 geotools 库。如果您已经在项目中添加了 geotools 依赖项,但又手动添加了该库的 jar 文件,则可能会导致类加载冲突。
尝试使用不同的类加载器加载库。您可以尝试使用不同的类加载器加载库,以避免冲突。例如,您可以尝试使用以下代码:
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 库路径。
希望这些解决方案能够帮助您解决问题。