java - "The crash happened outside the Java Virtual Machine in native code."如何解决这个错误(Java)?

标签 java usb jna hid

在这个链接http://www.blog.kslemb.com/doku.php/en/projects/globx/java_hid中使用库

我已修改此代码以在 HID 终端上写入

if (HIDHandle.equals(WinBase.INVALID_HANDLE_VALUE)) {
    return HID_DEVICE_NOT_OPENED;
}
/* Write Feature report */
boolean Status=Kernel32.INSTANCE.WriteFile(HIDHandle, buffer, (int)buffersize, null, null);
if (Status == false) {
    debug("Write File: " + getSystemError(Kernel32.INSTANCE.GetLastError()));
    return HID_DEVICE_TRANSFER_FAILED;
} else {
    return HID_DEVICE_SUCCESS;
}

此代码将成功写入 HID 设备,但随后会产生此错误

 A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7600d4d5, pid=4660, tid=3780
#
# JRE version: 6.0_27-b07
# Java VM: Java HotSpot(TM) Client VM (20.2-b06 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [KERNELBASE.dll+0xd4d5]
#
# An error report file with more information is saved as:
# D:\eng\senior_project\usb\NetBeansProjects\USB\hs_err_pid4660.log
#
# 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

以及这些出现在日志文件中的内容

a#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7600d4d5, pid=180, tid=4348
#
# JRE version: 6.0_27-b07
# Java VM: Java HotSpot(TM) Client VM (20.2-b06 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [KERNELBASE.dll+0xd4d5]
#
# 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 (0x001e9000):  JavaThread "main" [_thread_in_native, id=4348, stack(0x001f0000,0x00240000)]

siginfo: ExceptionCode=0xc0000005, writing address 0x00000000

Registers:
EAX=0x00000005, EBX=0x000002f8, ECX=0x001df148, EDX=0x0023f750
ESP=0x0023f738, EBP=0x0023f770, ESI=0x00000000, EDI=0x00000000
EIP=0x7600d4d5, EFLAGS=0x00010246

Top of Stack: (sp=0x0023f738)
0x0023f738:   165f7936 0023f8c0 00000000 00000000
0x0023f748:   0023f77c 00000004 00000000 00000005
0x0023f758:   0023f738 0023f300 0023fdd4 76036590
0x0023f768:   607ff39e fffffffe 0023f78c 76e512cc
0x0023f778:   000002f8 0211c3c8 00000005 00000000
0x0023f788:   00000000 0023f7a8 1000cb77 000002f8
0x0023f798:   0211c3c8 00000005 00000000 00000000
0x0023f7a8:   0023f7e8 1000c7c2 1000c5a0 0023f7d0 

Instructions: (pc=0x7600d4d5)
0x7600d4b5:   3d 03 01 00 00 75 12 6a 00 6a 00 53 ff 15 64 10
0x7600d4c5:   00 76 85 c0 7c 0e 8b 45 e0 85 c0 7c 07 8b 45 e4
0x7600d4d5:   89 07 eb c2 8b c8 81 e1 00 00 00 c0 81 f9 00 00
0x7600d4e5:   00 80 75 05 8b 4d e4 89 0f 50 e8 1e 98 02 00 33 


Register to memory mapping:

EAX=0x00000005 is an unknown value
EBX=0x000002f8 is an unknown value
ECX=0x001df148 is an unknown value
EDX=0x0023f750 is pointing into the stack for thread: 0x001e9000
ESP=0x0023f738 is pointing into the stack for thread: 0x001e9000
EBP=0x0023f770 is pointing into the stack for thread: 0x001e9000
ESI=0x00000000 is an unknown value
EDI=0x00000000 is an unknown value


Stack: [0x001f0000,0x00240000],  sp=0x0023f738,  free space=317k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [KERNELBASE.dll+0xd4d5]  WriteFile+0x133
C  [kernel32.dll+0x112cc]  WriteFile+0x4a
C  [jna6285930827620941734.dll+0xcb77]  Java_com_sun_jna_Native_initialize_1ffi_1type+0x37d7
C  [jna6285930827620941734.dll+0xc7c2]  Java_com_sun_jna_Native_initialize_1ffi_1type+0x3422
C  [jna6285930827620941734.dll+0x4561]  Java_com_sun_jna_Pointer__1getString+0xa31
C  [jna6285930827620941734.dll+0x4d2e]  Java_com_sun_jna_Function_invokeInt+0x2e
j  com.sun.jna.Function.invokeInt(I[Ljava/lang/Object;)I+0
j  com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;Z)Ljava/lang/Object;+315
j  com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+214
j  com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+341
j  $Proxy2.WriteFile(Lcom/sun/jna/platform/win32/WinNT$HANDLE;[BILcom/sun/jna/ptr/IntByReference;Lcom/sun/jna/platform/win32/WinBase$OVERLAPPED;)Z+37
j  usb.Communication.SetFeatureReport([BS)B+29
j  usb.USB.main([Ljava/lang/String;)V+62
v  ~StubRoutines::call_stub
V  [jvm.dll+0xfac3b]
V  [jvm.dll+0x18c391]
V  [jvm.dll+0xfacbd]
V  [jvm.dll+0x95776]
V  [jvm.dll+0x9d5b3]
C  [java.exe+0x2155]
C  [java.exe+0x85b4]
C  [kernel32.dll+0x1339a]  BaseThreadInitThunk+0x12
C  [ntdll.dll+0x39ef2]  RtlInitializeExceptionChain+0x63
C  [ntdll.dll+0x39ec5]  RtlInitializeExceptionChain+0x36

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  com.sun.jna.Function.invokeInt(I[Ljava/lang/Object;)I+0
j  com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;Z)Ljava/lang/Object;+315
j  com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+214
j  com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+341
j  $Proxy2.WriteFile(Lcom/sun/jna/platform/win32/WinNT$HANDLE;[BILcom/sun/jna/ptr/IntByReference;Lcom/sun/jna/platform/win32/WinBase$OVERLAPPED;)Z+37
j  usb.Communication.SetFeatureReport([BS)B+29
j  usb.USB.main([Ljava/lang/String;)V+62
v  ~StubRoutines::call_stub

---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x020f1c00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=2628, stack(0x045e0000,0x04630000)]
  0x020ed000 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=3440, stack(0x04550000,0x045a0000)]
  0x020ec000 JavaThread "Attach Listener" daemon [_thread_blocked, id=1904, stack(0x044c0000,0x04510000)]
  0x020e9000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=4148, stack(0x04430000,0x04480000)]
  0x020dec00 JavaThread "Finalizer" daemon [_thread_blocked, id=3336, stack(0x043a0000,0x043f0000)]
  0x020dcc00 JavaThread "Reference Handler" daemon [_thread_blocked, id=3196, stack(0x04310000,0x04360000)]
=>0x001e9000 JavaThread "main" [_thread_in_native, id=4348, stack(0x001f0000,0x00240000)]

Other Threads:
  0x020a0800 VMThread [stack: 0x04280000,0x042d0000] [id=4704]
  0x02100400 WatcherThread [stack: 0x04670000,0x046c0000] [id=4352]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
 def new generation   total 4928K, used 2462K [0x241e0000, 0x24730000, 0x29730000)
  eden space 4416K,  55% used [0x241e0000, 0x24447bb0, 0x24630000)
  from space 512K,   0% used [0x24630000, 0x24630000, 0x246b0000)
  to   space 512K,   0% used [0x246b0000, 0x246b0000, 0x24730000)
 tenured generation   total 10944K, used 0K [0x29730000, 0x2a1e0000, 0x341e0000)
   the space 10944K,   0% used [0x29730000, 0x29730000, 0x29730200, 0x2a1e0000)
 compacting perm gen  total 12288K, used 669K [0x341e0000, 0x34de0000, 0x381e0000)
   the space 12288K,   5% used [0x341e0000, 0x342877e8, 0x34287800, 0x34de0000)
    ro space 10240K,  54% used [0x381e0000, 0x3875f548, 0x3875f600, 0x38be0000)
    rw space 12288K,  55% used [0x38be0000, 0x39285140, 0x39285200, 0x397e0000)

Code Cache  [0x02170000, 0x02200000, 0x04170000)
 total_blobs=201 nmethods=66 adapters=71 free_code_cache=32980800 largest_free_block=0

Dynamic libraries:
0x00400000 - 0x00424000     C:\Program Files (x86)\Java\jdk1.6.0_27\bin\java.exe
0x77420000 - 0x775a0000     C:\Windows\SysWOW64\ntdll.dll
0x76e40000 - 0x76f50000     C:\Windows\syswow64\kernel32.dll
0x76000000 - 0x76046000     C:\Windows\syswow64\KERNELBASE.dll
0x76920000 - 0x769c0000     C:\Windows\syswow64\ADVAPI32.dll
0x76f50000 - 0x76ffc000     C:\Windows\syswow64\msvcrt.dll
0x75d80000 - 0x75d99000     C:\Windows\SysWOW64\sechost.dll
0x767d0000 - 0x768c0000     C:\Windows\syswow64\RPCRT4.dll
0x74f80000 - 0x74fe0000     C:\Windows\syswow64\SspiCli.dll
0x74f70000 - 0x74f7c000     C:\Windows\syswow64\CRYPTBASE.dll
0x7c340000 - 0x7c396000     C:\Program Files (x86)\Java\jdk1.6.0_27\jre\bin\msvcr71.dll
0x6d8a0000 - 0x6db4f000     C:\Program Files (x86)\Java\jdk1.6.0_27\jre\bin\client\jvm.dll
0x76ae0000 - 0x76be0000     C:\Windows\syswow64\USER32.dll
0x76730000 - 0x767c0000     C:\Windows\syswow64\GDI32.dll
0x75ca0000 - 0x75caa000     C:\Windows\syswow64\LPK.dll
0x76da0000 - 0x76e3d000     C:\Windows\syswow64\USP10.dll
0x745c0000 - 0x745f2000     C:\Windows\system32\WINMM.dll
0x76be0000 - 0x76c40000     C:\Windows\system32\IMM32.DLL
0x76050000 - 0x7611c000     C:\Windows\syswow64\MSCTF.dll
0x71540000 - 0x7158c000     C:\Windows\system32\apphelp.dll
0x6d850000 - 0x6d85c000     C:\Program Files (x86)\Java\jdk1.6.0_27\jre\bin\verify.dll
0x6d3d0000 - 0x6d3ef000     C:\Program Files (x86)\Java\jdk1.6.0_27\jre\bin\java.dll
0x6d890000 - 0x6d89f000     C:\Program Files (x86)\Java\jdk1.6.0_27\jre\bin\zip.dll
0x743e0000 - 0x743f6000     C:\Windows\system32\CRYPTSP.dll
0x743a0000 - 0x743db000     C:\Windows\system32\rsaenh.dll
0x71090000 - 0x710a7000     C:\Windows\system32\USERENV.dll
0x74380000 - 0x7438b000     C:\Windows\system32\profapi.dll
0x6d6b0000 - 0x6d6c3000     C:\Program Files (x86)\Java\jdk1.6.0_27\jre\bin\net.dll
0x76120000 - 0x76155000     C:\Windows\syswow64\WS2_32.dll
0x773f0000 - 0x773f6000     C:\Windows\syswow64\NSI.dll
0x74690000 - 0x746cc000     C:\Windows\system32\mswsock.dll
0x72e40000 - 0x72e46000     C:\Windows\System32\wship6.dll
0x746d0000 - 0x746e0000     C:\Windows\system32\NLAapi.dll
0x74620000 - 0x74630000     C:\Windows\system32\napinsp.dll
0x74600000 - 0x74612000     C:\Windows\system32\pnrpnsp.dll
0x745b0000 - 0x745bd000     C:\Windows\system32\wshbth.dll
0x74640000 - 0x74684000     C:\Windows\system32\DNSAPI.dll
0x74630000 - 0x74638000     C:\Windows\System32\winrnr.dll
0x74550000 - 0x74555000     C:\Windows\System32\wshtcpip.dll
0x74740000 - 0x7475c000     C:\Windows\system32\IPHLPAPI.DLL
0x74730000 - 0x74737000     C:\Windows\system32\WINNSI.DLL
0x74560000 - 0x74566000     C:\Windows\system32\rasadhlp.dll
0x74570000 - 0x745a8000     C:\Windows\System32\fwpuclnt.dll
0x10000000 - 0x10055000     C:\Users\mohamed\AppData\Local\Temp\jna6285930827620941734.dll
0x75c90000 - 0x75c95000     C:\Windows\syswow64\PSAPI.DLL
0x74b80000 - 0x74b89000     C:\Windows\system32\hid.dll
0x76160000 - 0x762fd000     C:\Windows\syswow64\setupapi.dll
0x75d40000 - 0x75d67000     C:\Windows\syswow64\CFGMGR32.dll
0x76500000 - 0x7658f000     C:\Windows\syswow64\OLEAUT32.dll
0x76c40000 - 0x76d9c000     C:\Windows\syswow64\ole32.dll
0x77000000 - 0x77012000     C:\Windows\syswow64\DEVOBJ.dll
0x75c60000 - 0x75c8d000     C:\Windows\syswow64\WINTRUST.dll
0x769c0000 - 0x76add000     C:\Windows\syswow64\CRYPT32.dll
0x767c0000 - 0x767cc000     C:\Windows\syswow64\MSASN1.dll

VM Arguments:
jvm_args: -Dfile.encoding=UTF-8 
java_command: usb.USB
Launcher Type: SUN_STANDARD

Environment Variables:
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;
USERNAME=mohamed
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 23 Stepping 10, GenuineIntel



---------------  S Y S T E M  ---------------

OS: Windows 7 , 64 bit Build 7601 Service Pack 1

CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 23 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3

Memory: 4k page, physical 3105384k(1019428k free), swap 6208920k(4162952k free)

vm_info: Java HotSpot(TM) Client VM (20.2-b06) for windows-x86 JRE (1.6.0_27-b07), built on Jul 19 2011 01:04:42 by "java_re" with MS VC++ 7.1 (VS2003)

time: Fri Feb 10 17:48:29 2012
elapsed time: 0 seconds

最佳答案

我已经找到了这个问题的解决方案,

boolean Status=Kernel32.INSTANCE.WriteFile(HIDHandle, buffer, (int)buffersize, null, null);

该函数不接受两个空值,只能将一个空值传递给该函数,因此更正示例为:

IntByReference bWritten = new IntByReference();
            /* Write Feature report */
           boolean Status=Kernel32.INSTANCE.WriteFile(HIDHandle, buffer, (int)buffersize, bWritten, null);

关于java - "The crash happened outside the Java Virtual Machine in native code."如何解决这个错误(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9231053/

相关文章:

c - USB Linux API : call ioctl requests from user space app

c - 有没有办法查询串口可用的数据量?

java - 来自指针的 JNA Java 结构

JNA UnsatisfiedLinkError,但设置了jna.library.path

macos - 如何确定已拔除的USB设备的LocationID?

java - Kotlin : how to Convert String with HTML numbers to String without HTML numbers

java - 如何在参数中传递类并使用其方法

java - Mysema QueryDSL 如何使用 "like"?

java - 在 Node 中加载 Java JNA 原生库

java - 使用 Gradle 将多个 JaCoCo .exec 文件聚合到单个覆盖率报告中