Could not load native libraries.
java.lang.UnsatisfiedLinkError: no ntvinv in java.library.path
java.lang.UnsatisfiedLinkError: no ntvinv in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at com.esri.arcgis.interop.NativeLoader.loadLibrary(Unknown Source)
at com.esri.arcgis.system.EngineInitializer.initializeEngine(Unknown Source)
at com.service.ArcGisService.initArcGISLicense(ArcGisService.java:98)
使用Java调用ArcGis GP工具初始化EngineInitializer.initializeEngine()时,出现如上错误,真是把人折腾S,安装了ArcGIS10.2_Desktop、ArcGIS_Server 10.2、ArcEngine10.2、ARCObject SDK for Java等等,配置了环境变量%AGSDESKTOPJAVA%\bin、%AGSDESKTOPJAVA%\java\jre\bin、%AGSSERVER%\bin等等还是不能解决我的问题。
后来发现只是Tomcat无法加载arcgis提供的dll,那么在myeclipse中引用,这个问题就得以解决,如下图:
可是目前我使用的myeclipse2017又找不到“app to library path”,所以只能通过代码加载去实现,如下:
String path="C:\\Program Files (x86)\\ArcGIS\\Desktop10.2\\bin";
//将此目录添加到系统环境变量中
addDirToPath(path);
//加载相应的dll文件,注意要将'\'替换为'/'
System.load(path.replaceAll("\\\\","/")+"/AfTopoGp.dll");
System.out.println(System.getProperty("java.library.path"));
EngineInitializer.initializeEngine();
。。。。。。。。。
private void addDirToPath(String s){
try {
//获取系统path变量对象
java.lang.reflect.Field field=ClassLoader.class.getDeclaredField("sys_paths");
//设置此变量对象可访问
field.setAccessible(true);
//获取此变量对象的值
String[] path=(String[])field.get(null);
//创建字符串数组,在原来的数组长度上增加一个,用于存放增加的目录
String[] tem=new String[path.length+1];
//将原来的path变量复制到tem中
System.arraycopy(path,0,tem,0,path.length);
//将增加的目录存入新的变量数组中
tem[path.length]=s;
//将增加目录后的数组赋给path变量对象
field.set(null,tem);
} catch (Exception e) {
e.printStackTrace();
}
}
如此便可以解决这个问题。
总结:
1、只需按照ArcGIS_Desktop,修改指向按照路径;
2、JDK、Tomcat需要使用32位版本;
安装破解安装包:https://download.csdn.net/download/zhuc_dongyc/11106729