2010.4.2日晚-2010.4.3下午:
需要开发个小程序,用到了java 调用dll库。
dll我用delphi开发,其中涉及到处理xml文档.此dll在delphi开发环境下测试通过,可一在java环境中调用,则jvm崩溃.
为解决此问题
,从2010.4.2日下午一直干到2010.4.3日清晨4:00,未解决,在无比郁闷中沉沉睡去。
起床已是4.3日10:00点,隐约醒来,想着未解决的问题,继续郁闷,再睡不着,于是起床继续。
由java调用dll,程序又不报异常,直接由jvm崩溃,无法调试,导致我几乎崩溃。
在我崩溃前最后几秒(2010.4.3
13:49),忽然灵光一闪,想到delphi操作xml文档,前后必加
CoInitialize(nil);
......
coUnInitialize();
是不是此原因呢?
再看delphi代码,果然,在调测dll用的例子中,我加了此两句,但在dll本身中未加此两句,所以用delphi本身的测试用例无问题,一到java中就出问题,于是把此两句加在dll操作xml相关位置。再次运行java,......pass,ok!!!!!
狂喜中!!!
反思开发过程:明知delphi操作xml需加CoInitialize(nil),coUnInitialize(),却又未充分认识它,导致时间浪费了整整一天,还茶不思饭不想。
jvm崩溃日志如下:
#
# A fatal error has been detected by the Java Runtime
Environment:
#
# Internal Error (0xeedfade), pid=5580, tid=3132
#
# JRE version: 6.0_18-b07
# Java VM: Java HotSpot(TM) Client VM (16.0-b13 mixed mode
windows-x86 )
# Problematic frame:
# C [kernel32.dll+0x3fbae]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native
code.
# See problematic frame for where to report the bug.
#
--------------- T H R E A D ---------------
Current thread (0x0237ac00): JavaThread "main" [_thread_in_native,
id=3132, stack(0x00a80000,0x00ad0000)]
siginfo: ExceptionCode=0xeedfade, ExceptionInformation=0x04ddca7d
0x04fd1684 0x800401f0 0x04ddca7d 0x04fd1598 0x00abf92c
0x00abf8f8
Registers:
EAX=0x00abf874, EBX=0x800401f0, ECX=0x00000007,
EDX=0x00000000
ESP=0x00abf874, EBP