返回信息流情况就是我用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
这是一条镜像帖。来源:北邮人论坛 / java / #25658同步于 2013/5/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【已解决】Crash了,求助。
mumubin
2013/5/26镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
用你说的变成这个了。我用的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();
【 在 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取数据
按照您的方法来了一遍。依然crash
【 在 qazwsxedc 的大作中提到: 】
:
: 哦,是我错了,directbuffer不支持这个,你能把参数换成 bytebuffer不?用ByteBuffer对应C/C++里的char[]
:
: ...................
【 在 mumubin 的大作中提到: 】
: 按照您的方法来了一遍。依然crash
好吧,那可能跟我以前碰到的不一样。。我原来是怀疑这块缓存在堆上分配 的,C的代码无法操作crash的。JNA不太了解
嗯,还是很感谢你的热心回复。
【 在 qazwsxedc 的大作中提到: 】
:
: 好吧,那可能跟我以前碰到的不一样。。我原来是怀疑这块缓存在堆上分配 的,C的代码无法操作crash的。JNA不太了解