下边是报错信息,因为对C++不是很了解,底层理解不透看不出问题出在哪里,各位大侠们能帮我一下吗?#
# An unexpected error has been detected by Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d9e1288, pid=3324, tid=1420
#
# Java VM: Java HotSpot(TM) Client VM (11.0-b15 mixed mode, sharing windows-x86)
# Problematic frame:
# V  [jvm.dll+0x131288]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#---------------  T H R E A D  ---------------Current thread (0x00846c00):  JavaThread "main" [_thread_in_vm, id=1420, stack(0x008d0000,0x00920000)]siginfo: ExceptionCode=0xc0000005, reading address 0x59454b4cRegisters:
EAX=0x59454b48, EBX=0x00000000, ECX=0x008475c4, EDX=0x0091fb38
ESP=0x0091fb2c, EBP=0x0084759c, ESI=0x00846c00, EDI=0x0084759c
EIP=0x6d9e1288, EFLAGS=0x00010206Top of Stack: (sp=0x0091fb2c)
0x0091fb2c:   008475a0 00846c00 000000b6 008475c4
0x0091fb3c:   008475c0 008475bc 008475b8 6d9e13e1
0x0091fb4c:   0091fba4 0084759c 008475a0 00000d00
0x0091fb5c:   00846c00 6d977a89 0091fba4 0084759c
0x0091fb6c:   008475a0 00000d00 000000b6 00846c00
0x0091fb7c:   00846c00 2aa31b8c 0091fc10 000000b6
0x0091fb8c:   00846c00 00846c00 00847500 00847180
0x0091fb9c:   00847188 00847574 00000000 00000000 Instructions: (pc=0x6d9e1288)
0x6d9e1278:   4a 57 8b 7c 24 24 3b fb 75 04 33 c0 eb 05 8b 07
0x6d9e1288:   8b 40 04 50 56 8d 4c 24 38 e8 6a 8c ee ff 8b 4c 
Stack: [0x008d0000,0x00920000],  sp=0x0091fb2c,  free space=318k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [jvm.dll+0x131288]Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  java.io.Writer.write(Ljava/lang/String;)V+4
j  java.io.PrintStream.write(Ljava/lang/String;)V+13
j  java.io.PrintStream.print(Ljava/lang/String;)V+9
j  java.io.PrintStream.println(Ljava/lang/String;)V+6
j  org.gw.core.Test.main([Ljava/lang/String;)V+29
v  ~StubRoutines::call_stub---------------  P R O C E S S  ---------------Java Threads: ( => current thread )
  0x02b02400 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=3032, stack(0x02d70000,0x02dc0000)]
  0x02af8800 JavaThread "CompilerThread0" daemon [_thread_blocked, id=3088, stack(0x02d20000,0x02d70000)]
  0x02af7000 JavaThread "Attach Listener" daemon [_thread_blocked, id=3468, stack(0x02cd0000,0x02d20000)]
  0x02b01800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=4012, stack(0x02c80000,0x02cd0000)]
  0x02ab4000 JavaThread "Finalizer" daemon [_thread_blocked, id=2160, stack(0x02c30000,0x02c80000)]
  0x02aaf400 JavaThread "Reference Handler" daemon [_thread_blocked, id=1312, stack(0x02be0000,0x02c30000)]
=>0x00846c00 JavaThread "main" [_thread_in_vm, id=1420, stack(0x008d0000,0x00920000)]Other Threads:
  0x02aadc00 VMThread [stack: 0x02b90000,0x02be0000] [id=3216]
  0x02b0c000 WatcherThread [stack: 0x02dc0000,0x02e10000] [id=1676]VM state:not at safepoint (normal execution)VM Mutex/Monitor currently owned by a thread: NoneHeap
 def new generation   total 960K, used 236K [0x229e0000, 0x22ae0000, 0x22ec0000)
  eden space 896K,  26% used [0x229e0000, 0x22a1b130, 0x22ac0000)
  from space 64K,   0% used [0x22ac0000, 0x22ac0000, 0x22ad0000)
  to   space 64K,   0% used [0x22ad0000, 0x22ad0000, 0x22ae0000)
 tenured generation   total 4096K, used 0K [0x22ec0000, 0x232c0000, 0x269e0000)
   the space 4096K,   0% used [0x22ec0000, 0x22ec0000, 0x22ec0200, 0x232c0000)
 compacting perm gen  total 12288K, used 369K [0x269e0000, 0x275e0000, 0x2a9e0000)
   the space 12288K,   3% used [0x269e0000, 0x26a3c4a0, 0x26a3c600, 0x275e0000)
    ro space 8192K,  67% used [0x2a9e0000, 0x2af42f30, 0x2af43000, 0x2b1e0000)
    rw space 12288K,  53% used [0x2b1e0000, 0x2b850180, 0x2b850200, 0x2bde0000)Dynamic libraries:
0x00400000 - 0x00424000  C:\Program Files\Java\jdk1.6.0_10\bin\javaw.exe
0x7c920000 - 0x7c9b3000  C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c91e000  C:\WINDOWS\system32\kernel32.dll
0x77da0000 - 0x77e49000  C:\WINDOWS\system32\ADVAPI32.dll
0x77e50000 - 0x77ee2000  C:\WINDOWS\system32\RPCRT4.dll
0x77fc0000 - 0x77fd1000  C:\WINDOWS\system32\Secur32.dll
0x77d10000 - 0x77da0000  C:\WINDOWS\system32\USER32.dll
0x77ef0000 - 0x77f39000  C:\WINDOWS\system32\GDI32.dll
0x76300000 - 0x7631d000  C:\WINDOWS\system32\IMM32.DLL
0x62c20000 - 0x62c29000  C:\WINDOWS\system32\LPK.DLL
0x73fa0000 - 0x7400b000  C:\WINDOWS\system32\USP10.dll
0x7c340000 - 0x7c396000  C:\Program Files\Java\jdk1.6.0_10\jre\bin\msvcr71.dll
0x6d8b0000 - 0x6db06000  C:\Program Files\Java\jdk1.6.0_10\jre\bin\client\jvm.dll
0x76b10000 - 0x76b3a000  C:\WINDOWS\system32\WINMM.dll
0x6d330000 - 0x6d338000  C:\Program Files\Java\jdk1.6.0_10\jre\bin\hpi.dll
0x76bc0000 - 0x76bcb000  C:\WINDOWS\system32\PSAPI.DLL
0x6d860000 - 0x6d86c000  C:\Program Files\Java\jdk1.6.0_10\jre\bin\verify.dll
0x6d3d0000 - 0x6d3ef000  C:\Program Files\Java\jdk1.6.0_10\jre\bin\java.dll
0x6d8a0000 - 0x6d8af000  C:\Program Files\Java\jdk1.6.0_10\jre\bin\zip.dll
0x10000000 - 0x10007000  C:\RegistLoader.dll
0x78520000 - 0x785c3000  C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.4148_x-ww_d495ac4e\MSVCR90.dllVM Arguments:
java_command: org.gw.core.Test
Launcher Type: SUN_STANDARDEnvironment Variables:
JAVA_HOME=C:\Program Files\Java\jdk1.5.0_14
CLASSPATH=C:\Program Files\Java\jdk1.6.0_10\lib\dt.jar;C:\Program Files\Java\jdk1.6.0_10\lib\tools.jar;C:\Program Files\Java\jdk1.6.0_10\bin;C:\util\jmeter/lib/ext/ApacheJMeter_core.jar;C:\util\jmeter/lib/jorphan.jar;JMETER_HOME/lib/logkit-1.2.jar;
PATH=D:\oracle\product\10.2.0\client_2\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Java\jdk1.5.0_14\bin;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\WinRAR;C:\Program Files\Java\j2re1.4.1_01\bin;C:\Program Files\Internet Explorer;C:\Program Files\MySQL\MySQL Server 5.1\bin;C:\Documents and Settings\All Users\Documents\RAD Studio\7.0\BPL
USERNAME=Admin
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 16 Model 6 Stepping 3, AuthenticAMD---------------  S Y S T E M  ---------------OS: Windows XP Build 2600 Service Pack 3CPU:total 2 (2 cores per cpu, 1 threads per core) family 16 model 6 stepping 3, cmov, cx8, fxsr, mmx, sse, sse2, sse3, mmxext, 3dnow, 3dnowext, sse4aMemory: 4k page, physical 2097151k(1897420k free), swap 4194303k(3703212k free)vm_info: Java HotSpot(TM) Client VM (11.0-b15) for windows-x86 JRE (1.6.0_10-rc2-b32), built on Sep 12 2008 00:52:11 by "java_re" with MS VC++ 7.1time: Mon Aug 26 17:12:01 2013
elapsed time: 0 seconds
javavisual studiojniVC++

解决方案 »

  1.   

    这是VC++代码。。
    / RegistLoader.cpp : 定义 DLL 应用程序的导出函数。#include "stdafx.h"
    #include "RegistLoader.h"
    #include <string.h>
    #include <windows.h>
    #include <winbase.h>
    #include <stdio.h>
    #include <malloc.h>
    #include <atlstr.h>//jstring to char* 
    char* jstringTostring(JNIEnv* env, jstring jstr) 

           char* rtn = NULL; 
           jclass clsstring = env->FindClass("java/lang/String"); 
           jstring strencode = env->NewStringUTF("utf-8"); 
           jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B"); 
           jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr, mid, strencode); 
           jsize alen = env->GetArrayLength(barr); 
           jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE); 
           if (alen > 0) 
           { 
                     rtn = (char*)malloc(alen + 1); 
                     memcpy(rtn, ba, alen); 
                     rtn[alen] = 0; 
           } 
           env->ReleaseByteArrayElements(barr, ba, 0); 
           return rtn; 
    }//JAVA 通过JNI的方式调用C++获取注册表信息
    JNIEXPORT jstring JNICALL Java_org_gw_core_RegistLoader_getRegistInfo
      (JNIEnv *env, jobject, jstring root, jstring path, jstring key){
      
    HKEY hAppKey;   
    LPCTSTR WINDS_SERVICE_REGISTRY_KEY = (LPCTSTR)jstringTostring(env,path);
    LPCTSTR DATA_FILE_SUB_KEY = (LPCTSTR)jstringTostring(env,key);
    char szDataFile[80];
    if(jstringTostring(env,root) == "HKEY_LOCAL_MACHINE"){  //HKEY_LOCAL_MACHINE
    if(ERROR_SUCCESS == RegOpenKeyEx (HKEY_LOCAL_MACHINE,WINDS_SERVICE_REGISTRY_KEY,0,KEY_READ,&hAppKey)){
    ULONG cbSize = MAX_PATH*sizeof(TCHAR);   
    DWORD dwFlag = RegQueryValueEx (
    hAppKey,
    DATA_FILE_SUB_KEY,
    NULL,
    NULL,
        (LPBYTE)szDataFile,&cbSize);
    RegCloseKey (hAppKey); 
    if (ERROR_SUCCESS == dwFlag)  {       
    CString strDate=szDataFile;
    if(strDate.GetLength()>0){ 
    char *p = (LPSTR)(LPCTSTR)strDate;
    return env->NewStringUTF(p);
    }   
    else{ 
    return env->NewStringUTF("");
    }
     }
    }
    }
    }
      

  2.   

    这是java代码。如果能解决的话还可以再追加100分  package org.gw.core;/**
     * TODO 读取注册表信息
     * 
     * @author  guowei  [email protected]  2013-80-20
     * 
     */
    public class RegistLoader {
    // 注册表的根路径名称
    public static String HKEY_CLASSES_ROOT = "HKEY_CLASSES_ROOT";
    public static String HKEY_LOCAL_MACHINE = "HKEY_LOCAL_MACHINE";
    public static String HKEY_CURRENT_USER = "HKEY_CURRENT_USER";
    public static String HKEY_USERS = "HKEY_USERS";
    public static String HKEY_CURRENT_CONFIG = "HKEY_CURRENT_CONFIG"; /**
     * 读取注册表信息
     * @param root 注册表根路径
     * @param path 注册表路径
     * @param key  注册表键值
     * @return     注册表value值
     */
    public native String getRegistInfo(String root,String path, String key);

    }
      

  3.   

    EXCEPTION_ACCESS_VIOLATION 一般是由于你C++部分的代码访问内存操作有问题,所以应该检查你的C++生成dll的代码
      

  4.   

    你可以先检查一下你的java环境,
       引用你上面的:Environment Variables:
     JAVA_HOME=C:\Program Files\Java\jdk1.5.0_14
     CLASSPATH=C:\Program Files\Java\jdk1.6.0_10\lib\dt.jar;C:\Program Files\Java\jdk1.6.0_10\lib\tools.jar;C:\Program Files\Java\jdk1.6.0_10jdk版本不同,建议都使用jdk1.6