BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #25658同步于 2013/5/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【已解决】Crash了,求助。

mumubin
2013/5/26镜像同步6 回复
情况就是我用JNA调用一个本地的dll,调用的前两个函数都没有问题。用读数据的函数的时候就crash了。 请大牛帮忙看看。什么原因怎么解决 源码 JNA接口 package com.jxdl.dataConnect; import com.sun.jna.Native; import com.sun.jna.win32.StdCallLibrary; public interface sm125_Comm_Dll extends StdCallLibrary { sm125_Comm_Dll INSTANCE = (sm125_Comm_Dll)Native.loadLibrary("sm125_Comm_Dll",sm125_Comm_Dll.class); public int sm125_Connect(String IPAddress); public int sm125_Disconnect(); public int SendCommandPD(String command); public int DataReadPD(byte[] ArrayOfData , int NumberOfBytes); } public class Test { public static void main(String[] args) { int isConnect = 1;//0代表建立成功,1代表连接失败。 String str = "10.0.0.122"; isConnect = sm125_Comm_Dll.INSTANCE.sm125_Connect(str); System.out.println("isConnect:" + isConnect);//已测试建立连接 if(sm125_Comm_Dll.INSTANCE.SendCommandPD("#GET_PEAKS_AND_LEVELS") != 0) { System.out.println("SendCommandPD命令运行失败"); return ; } else{ System.out.println("发送命令成功"); } byte[] returnedData = new byte[10000]; int numberOfBytes = 100; int read = sm125_Comm_Dll.INSTANCE.DataReadPD(returnedData,numberOfBytes); System.out.println(read); System.out.println(returnedData[1]); } } 错误日志 # # An unexpected error has been detected by Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0b0e1c4b, pid=176, tid=4000 # # Java VM: Java HotSpot(TM) Client VM (11.3-b02 mixed mode windows-x86) # Problematic frame: # C [sm125_Comm_Dll.dll+0x1c4b] # # 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 (0x00857800): JavaThread "main" [_thread_in_native, id=4000, stack(0x008f0000,0x00940000)] siginfo: ExceptionCode=0xc0000005, writing address 0x00000064 Registers: EAX=0x00000064, EBX=0x00000000, ECX=0x0000002c, EDX=0x00000000 ESP=0x0093f380, EBP=0x0093f3f8, ESI=0x0093f380, EDI=0x0093f3f8 EIP=0x0b0e1c4b, EFLAGS=0x00010202 Top of Stack: (sp=0x0093f380) 0x0093f380: 0093fb14 00000002 00000000 cccccccc 0x0093f390: cccccccc cccccccc cccccccc cccccccc 0x0093f3a0: cccccccc cccccccc cccccccc cccccccc 0x0093f3b0: cccccccc cccccccc cccccccc cccccccc 0x0093f3c0: cccccccc cccccccc cccccccc cccccccc 0x0093f3d0: cccccccc 0000000a 30303030 30303030 0x0093f3e0: cc003434 30303030 30303030 cccc3434 0x0093f3f0: 0000000a 0000002c 0093f408 1000dc25 Instructions: (pc=0x0b0e1c4b) 0x0b0e1c3b: 00 00 8b 45 f8 e9 34 01 00 00 8b 45 0c 8b 4d fc 0x0b0e1c4b: 89 08 8b 55 fc 52 e8 fa 02 00 00 83 c4 04 89 45 Stack: [0x008f0000,0x00940000], sp=0x0093f380, free space=316k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) C [sm125_Comm_Dll.dll+0x1c4b] C [jna4138342220634322716.dll+0xdc25] C [jna4138342220634322716.dll+0xd546] C [jna4138342220634322716.dll+0x2e5e] C [jna4138342220634322716.dll+0x54ce] j com.sun.jna.Native.invokeInt(JI[Ljava/lang/Object;)I+0 j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;Z)Ljava/lang/Object;+333 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 $Proxy0.DataReadPD([BI)I+23 j com.jxdl.dataConnect.Test.main([Ljava/lang/String;)V+83 v ~StubRoutines::call_stub Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) j com.sun.jna.Native.invokeInt(JI[Ljava/lang/Object;)I+0 j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;Z)Ljava/lang/Object;+333 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 $Proxy0.DataReadPD([BI)I+23 j com.jxdl.dataConnect.Test.main([Ljava/lang/String;)V+83 v ~StubRoutines::call_stub --------------- P R O C E S S --------------- Java Threads: ( => current thread ) 0x0ab29000 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=1904, stack(0x0ad70000,0x0adc0000)] 0x0ab24400 JavaThread "CompilerThread0" daemon [_thread_blocked, id=212, stack(0x0ad20000,0x0ad70000)] 0x0ab1f800 JavaThread "Attach Listener" daemon [_thread_blocked, id=1340, stack(0x0acd0000,0x0ad20000)] 0x0ab4a400 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=4052, stack(0x0ac80000,0x0acd0000)] 0x0ab0d400 JavaThread "Finalizer" daemon [_thread_blocked, id=1760, stack(0x0ac30000,0x0ac80000)] 0x0ab08c00 JavaThread "Reference Handler" daemon [_thread_blocked, id=1496, stack(0x0abe0000,0x0ac30000)] =>0x00857800 JavaThread "main" [_thread_in_native, id=4000, stack(0x008f0000,0x00940000)] Other Threads: 0x0ab05400 VMThread [stack: 0x0ab90000,0x0abe0000] [id=1908] 0x0ab34000 WatcherThread [stack: 0x0adc0000,0x0ae10000] [id=884] VM state:not at safepoint (normal execution) VM Mutex/Monitor currently owned by a thread: None Heap def new generation total 960K, used 810K [0x029f0000, 0x02af0000, 0x02ed0000) eden space 896K, 83% used [0x029f0000, 0x02aaa920, 0x02ad0000) from space 64K, 100% used [0x02ae0000, 0x02af0000, 0x02af0000) to space 64K, 0% used [0x02ad0000, 0x02ad0000, 0x02ae0000) tenured generation total 4096K, used 166K [0x02ed0000, 0x032d0000, 0x069f0000) the space 4096K, 4% used [0x02ed0000, 0x02ef9998, 0x02ef9a00, 0x032d0000) compacting perm gen total 12288K, used 3244K [0x069f0000, 0x075f0000, 0x0a9f0000) the space 12288K, 26% used [0x069f0000, 0x06d1b128, 0x06d1b200, 0x075f0000) No shared spaces configured. Dynamic libraries: 0x00400000 - 0x00424000 d:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin\javaw.exe 0x7c920000 - 0x7c9b6000 C:\WINDOWS\system32\ntdll.dll 0x7c800000 - 0x7c91e000 C:\WINDOWS\system32\kernel32.dll 0x77da0000 - 0x77e49000 C:\WINDOWS\system32\ADVAPI32.dll 0x77e50000 - 0x77ee3000 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 d:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin\msvcr71.dll 0x6d8b0000 - 0x6db06000 d:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin\client\jvm.dll 0x76b10000 - 0x76b3a000 C:\WINDOWS\system32\WINMM.dll 0x6d340000 - 0x6d348000 d:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin\hpi.dll 0x76bc0000 - 0x76bcb000 C:\WINDOWS\system32\PSAPI.DLL 0x6d860000 - 0x6d86c000 d:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin\verify.dll 0x6d3e0000 - 0x6d3ff000 d:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin\java.dll 0x6d8a0000 - 0x6d8af000 d:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin\zip.dll 0x68000000 - 0x68036000 C:\WINDOWS\system32\rsaenh.dll 0x77be0000 - 0x77c38000 C:\WINDOWS\system32\msvcrt.dll 0x759d0000 - 0x75a7f000 C:\WINDOWS\system32\USERENV.dll 0x5fdd0000 - 0x5fe25000 C:\WINDOWS\system32\netapi32.dll 0x6d6c0000 - 0x6d6d3000 D:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin\net.dll 0x71a20000 - 0x71a37000 C:\WINDOWS\system32\WS2_32.dll 0x71a10000 - 0x71a18000 C:\WINDOWS\system32\WS2HELP.dll 0x719c0000 - 0x719fe000 C:\WINDOWS\system32\mswsock.dll 0x60fd0000 - 0x61025000 C:\WINDOWS\system32\hnetcfg.dll 0x58a00000 - 0x58a07000 C:\WINDOWS\System32\wship6.dll 0x76ef0000 - 0x76f17000 C:\WINDOWS\system32\DNSAPI.dll 0x76f80000 - 0x76f88000 C:\WINDOWS\System32\winrnr.dll 0x76f30000 - 0x76f5c000 C:\WINDOWS\system32\WLDAP32.dll 0x64000000 - 0x64021000 C:\Program Files\Bonjour\mdnsNSP.dll 0x76d30000 - 0x76d48000 C:\WINDOWS\system32\Iphlpapi.dll 0x76f90000 - 0x76f96000 C:\WINDOWS\system32\rasadhlp.dll 0x10000000 - 0x1003d000 C:\Documents and Settings\Administrator\Local Settings\Temp\jna-Administrator\jna4138342220634322716.dll 0x0b0e0000 - 0x0b114000 C:\WINDOWS\system32\sm125_Comm_Dll.dll 0x71a00000 - 0x71a08000 C:\WINDOWS\System32\wshtcpip.dll VM Arguments: jvm_args: -Dfile.encoding=GBK java_command: com.jxdl.dataConnect.Test Launcher Type: SUN_STANDARD Environment Variables: PATH=d:/Program Files/MyEclipse/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin/client;d:/Program Files/MyEclipse/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin;d:/Program Files/MyEclipse/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/lib/i386;C:\Program Files\Network General\Sniffer Portable\Program;C:\Program Files\Network General\Sniffer Portable\Program\isniffer;C:\Program Files\Network General\Sniffer Portable\ApperaCollector\bin;C:\Program Files\Network General\Sniffer Portable\SupportComponents\bin;C:\Program Files\Network General\Sniffer Portable\CoreComponents\bin;C:\Program Files\Network General\SnifferProtocols\Decode\1.0;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\ThinkPad Wireless LAN Adapter Software;C:\Program Files\Rational\common;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:\WINDOWS\system32\WindowsPowerShell\v1.0;D:\Program Files\Java\jdk1.7.0_17\bin;D:\apache-ant-1.9.0\bin;C:\Program Files\MySQL\MySQL Server 5.6\bin USERNAME=Administrator OS=Windows_NT PROCESSOR_IDENTIFIER=x86 Family 6 Model 42 Stepping 7, GenuineIntel --------------- S Y S T E M --------------- OS: Windows XP Build 2600 Service Pack 3 CPU:total 2 (8 cores per cpu, 2 threads per core) family 6 model 10 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, ht Memory: 4k page, physical 2097151k(1152544k free), swap 4194303k(3057944k free) vm_info: Java HotSpot(TM) Client VM (11.3-b02) for windows-x86 JRE (1.6.0_13-b03), built on Mar 9 2009 01:15:24 by "java_re" with MS VC++ 7.1 time: Sun May 26 10:47:48 2013 elapsed time: 0 seconds
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
qazwsxedc机器人#1 · 2013/5/26
试试这个? byte[] returnedData = ByteBuffer.allocateDirect(10000).array();
mumubin机器人#2 · 2013/5/26
用你说的变成这个了。我用的jdk1.6 Exception in thread "main" java.lang.UnsupportedOperationException at java.nio.ByteBuffer.array(ByteBuffer.java:940) at com.jxdl.dataConnect.Test.main(Test.java:34) 【 在 qazwsxedc 的大作中提到: 】 : 试试这个? : byte[] returnedData = ByteBuffer.allocateDirect(10000).array();
qazwsxedc机器人#3 · 2013/5/26
【 在 mumubin 的大作中提到: 】 : 用你说的变成这个了。我用的jdk1.6 : Exception in thread "main" java.lang.UnsupportedOperationException : at java.nio.ByteBuffer.array(ByteBuffer.java:940) : ................... 哦,是我错了,directbuffer不支持这个,你能把参数换成 bytebuffer不?用ByteBuffer对应C/C++里的char[] public int DataReadPD(ByteBuffer buffer, int NumberOfBytes); 然后去操作这个buffer取数据
mumubin机器人#4 · 2013/5/26
按照您的方法来了一遍。依然crash 【 在 qazwsxedc 的大作中提到: 】 : : 哦,是我错了,directbuffer不支持这个,你能把参数换成 bytebuffer不?用ByteBuffer对应C/C++里的char[] : : ...................
qazwsxedc机器人#5 · 2013/5/26
【 在 mumubin 的大作中提到: 】 : 按照您的方法来了一遍。依然crash 好吧,那可能跟我以前碰到的不一样。。我原来是怀疑这块缓存在堆上分配 的,C的代码无法操作crash的。JNA不太了解
mumubin机器人#6 · 2013/5/26
嗯,还是很感谢你的热心回复。 【 在 qazwsxedc 的大作中提到: 】 : : 好吧,那可能跟我以前碰到的不一样。。我原来是怀疑这块缓存在堆上分配 的,C的代码无法操作crash的。JNA不太了解