我的AE开发环境:
win7 64位
Eclipse Java EE IDE: Kepler Release, 64位
ArcGis: 10.1
JRE: 1.7 64位
在初始化ArcEngine的时候遇到如下几个问题,并解决。
初始化语句如下:
static void initializeArcGISLicenses() {
com.esri.arcgis.system.EngineInitializer.initializeEngine();
try {
com.esri.arcgis.system.AoInitialize ao = new com.esri.arcgis.system.AoInitialize();
if (ao.isProductCodeAvailable(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeEngine) ==com.esri.arcgis.system.esriLicenseStatus.esriLicenseAvailable)
ao.initialize(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeEngine);
else if (ao.isProductCodeAvailable(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB)==com.esri.arcgis.system.esriLicenseStatus.esriLicenseAvailable)
ao.initialize(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
else if (ao.isProductCodeAvailable(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeAdvanced)==com.esri.arcgis.system.esriLicenseStatus.esriLicenseAvailable)
ao.initialize(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeAdvanced);
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeTracking);
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork);
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeDataInteroperability);
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeMLE);
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeSchematics);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("初始化成功");
}
问题1、no ntvinv in java.library.path
A、 异常信息:
java.lang.UnsatisfiedLinkError: no ntvinv in java.library.path
B、 问题排查步骤:Could not load native libraries.
java.lang.UnsatisfiedLinkError: no ntvinv in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1878)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1087)
at com.esri.arcgis.interop.NativeLoader.loadLibrary(Unknown Source)
at com.esri.arcgis.system.EngineInitializer.initializeEngine(Unknown Source)
at test.gp.GetModelParam.initializeArcGISLicenses(GetModelParam.java:44)
at test.gp.GetModelParam.main(GetModelParam.java:68)
Could not load native libraries.
1) 打印环境变量 :System.out.println(System.getProperty("java.library.path"));
如发现没有%AGSENGINEJAVA%\bin的信息,则说明并没有将ArcEngine加入系统环境。
2)查看系统环境变量。path:
确认是否包含 %AGSDESKTOPJAVA%\bin;%AGSENGINEJAVA%\bin;%AGSSERVER%\bin;(最好这三个都写入path)。
3)不要引入ArcObject Sample Library。
eclipse上安装了arcgis插件的同学很容易因为导入这组lib而出现此问题。
C、问题原因:
arcEngine未配置到系统环境,或程序未能读取到AE的环境配置。
D、解决方案:
1)配置arcEngine开发环境变量: %AGSDESKTOPJAVA%\bin;%AGSENGINEJAVA%\bin;%AGSSERVER%\bin;
2)不要引入ArcObject Sample Library。
问题2、The specified product or version does not exist on this machine. in 'ArcGISVersion.Version'
A、异常信息:
Unable to initialize ArcObjects environment.
AutomationException: 0x800401f5 - The specified product or version does not exist on this machine. in 'ArcGISVersion.Version'
at com.esri.arcgis.version.VersionManager.loadVersion(Unknown Source)
at com.esri.arcgis.system.EngineInitializer.setVersionAndInitialize(Unknown Source)
at com.esri.arcgis.system.EngineInitializer.initializeEngine(Unknown Source)
at test.gp.GetModelParam.initializeArcGISLicenses(GetModelParam.java:44)
at test.gp.GetModelParam.main(GetModelParam.java:69)
Exception in thread "main" java.lang.RuntimeException: AutomationException: 0x800401f5 - The specified product or version does not exist on this machine. in 'ArcGISVersion.Version'
at com.esri.arcgis.system.EngineInitializer.setVersionAndInitialize(Unknown Source)
at com.esri.arcgis.system.EngineInitializer.initializeEngine(Unknown Source)
at test.gp.GetModelParam.initializeArcGISLicenses(GetModelParam.java:44)
at test.gp.GetModelParam.main(GetModelParam.java:69)
Caused by: AutomationException: 0x800401f5 - The specified product or version does not exist on this machine. in 'ArcGISVersion.Version'
at com.esri.arcgis.version.VersionManager.loadVersion(Unknown Source)
... 4 more
B、问题排查步骤
1)确保ArcEngine的可用性。
2)将JRE编译器改为1.6,仍然会出现此问题。
3)JRE替换成 1.6版本,32位的
此时ArcEngine初始化成功。
C、问题原因:
JRE版本导致AE初始化时匹配不到正确的ArcGISVersion.Version
D、解决方案:
AE项目的JRE采用ArcGis自带的JRE。或者采用JRE1.6(目前是可用)