Frustrations with ArcObjects
June 10th, 2014I’ve been working on the project mentioned last week, and found something interesting in ArcObjects for Java. Â It comes out looking like a bug, but it is just bad code that is hard to detect (partly because it involves setting a value a programmer would never expect to set).
The problem manifests itself in an error like this:
# # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x60e9f090, pid=6184, tid=3704 # # JRE version: Java(TM) SE Runtime Environment (8.0_05-b13) (build 1.8.0_05-b13) # Java VM: Java HotSpot(TM) Client VM (25.5-b02 mixed mode windows-x86 ) # Problematic frame: # C [GdbCoreLib.dll+0x14f090] # # Failed to write core dump. Minidumps are not enabled by default on client versions of Windows # # An error report file with more information is saved as: # C:\Users\arohne\workspace\GPS HHTS Analysis Esri Export\hs_err_pid6184.log # # If you would like to submit a bug report, please visit: # http://bugreport.sun.com/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. #
I poured over this for days, and even considered sending this to ESRI Support. Â As I continued looking into it, I found the problem:
int fieldCount=0;
for(java.lang.reflect.Field f:GPSData.class.getDeclaredFields())
if(Modifier.isPublic(f.getModifiers()))
fieldCount++;
fieldCount+=2; //FIXME: Trying to @&#$Â things up
fieldsEdit.setFieldCount(2+fieldCount);
Previously, I didn’t have the loop and instead had fieldsEdit.setFieldCount(2+GPSData.class.getDeclaredFields()+2);. Â The problem was that it was returning all the fields (both public and private), but I only defined public fields. Â This caused that error. Â I tested this by adding the fieldCount+=2; to the code (hence the FIXME tag) and was able to get things to work without intentionally changing the field count and break it when I have an incorrect field count.
I hope this helps someone out, as it isn’t documented elsewhere that I could find.
-A-