我目前使用JNA技术调用C语言编写的DLL操作读卡器,进行卡片的交互工作,
前台的界面使用了Swing制作了简单的界面,但是在运行期间,
总是因为不知名的原因造成JVM 崩溃了。按照我的程序实现,点击按钮就会调用一个test方法,但是点击一次就可以正确执行,
或者2次 3次 多次点击就会造成JVM崩溃。
不知道大家谁能够帮助解决一下这个问题。
或者如果这个跨平台调用出错的时候,JVM仍然可以运行。否则
我的工具是需要成千上万次的点击执行的,以目前的这种状态,JVM挂了 就要重启程序。
给工作带来很大的不便。急切需要大家的帮助! 谢谢 集思广益。
前台的界面使用了Swing制作了简单的界面,但是在运行期间,
总是因为不知名的原因造成JVM 崩溃了。按照我的程序实现,点击按钮就会调用一个test方法,但是点击一次就可以正确执行,
或者2次 3次 多次点击就会造成JVM崩溃。
不知道大家谁能够帮助解决一下这个问题。
或者如果这个跨平台调用出错的时候,JVM仍然可以运行。否则
我的工具是需要成千上万次的点击执行的,以目前的这种状态,JVM挂了 就要重启程序。
给工作带来很大的不便。急切需要大家的帮助! 谢谢 集思广益。
每次还都是在同一个位置,但是这个出错的dll是windows的dll。
还真是难办。或者大家有没有好的java调用dll的方法或者例子之类的。
谢谢大家了
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c930f20, pid=4092, tid=1756
# JRE version: 6.0_20-b02
# Java VM: Java HotSpot(TM) Client VM (16.3-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [ntdll.dll+0x10f20]
# 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 (0x0357c400): JavaThread "AWT-EventQueue-0" [_thread_in_native, id=1756, stack(0x03850000,0x038a0000)]
siginfo: ExceptionCode=0xc0000005, reading address 0x0000eed3
Registers:
EAX=0x0000eecf, EBX=0x00030000, ECX=0x00030178, EDX=0x00ed9830
ESP=0x0389edec, EBP=0x0389f00c, ESI=0x00ed9828, EDI=0x00ed9830
EIP=0x7c930f20, EFLAGS=0x00010246
Top of Stack: (sp=0x0389edec)
0x0389edec: 0357c400 00000003 33212ab8 0357d01c
0x0389edfc: 0389fa00 0389ef24 0000000a 00000000
0x0389ee0c: 0389ee50 6d97fcf1 0389ef1c 0089ee78
0x0389ee1c: 0389ee90 00ff9210 0357cc44 373f4df8
0x0389ee2c: 0357c400 00000004 0357c400 0389ee24
0x0389ee3c: 042743a9 0389fa58 6d9fbc40 6da2ed98
0x0389ee4c: ffffffff 0389ee6c 6d8f051d 6d8f0340
0x0389ee5c: 0389ef1c 0389ee78 0389ee90 0357c400
Instructions: (pc=0x7c930f20)
0x7c930f10: 85 94 fe ff ff 8b 4a 04 89 8d ec fe ff ff 8b 39
0x7c930f20: 3b 78 04 0f 85 33 5a 02 00 3b fa 0f 85 2b 5a 02
Stack: [0x03850000,0x038a0000], sp=0x0389edec, free space=13b0389e920k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [ntdll.dll+0x10f20]
C [msvcrt.dll+0x1c3c9]
C [msvcrt.dll+0x1c3e7]
C [msvcrt.dll+0x1c42e]
C [jna1259562623130270810.dll+0x35d1]
j com.sun.jna.Memory.malloc(J)J+0
j com.sun.jna.Memory.<init>(J)V+27
j com.sun.jna.NativeString.<init>(Ljava/lang/String;Z)V+79
j com.sun.jna.Function.convertArgument([Ljava/lang/Object;ILjava/lang/reflect/Method;Lcom/sun/jna/TypeMapper;Z)Ljava/lang/Object;+347
j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+114
j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+341
j $Proxy0.HDR_Initialize(Lcom/sun/jna/ptr/IntByReference;Ljava/lang/String;IJ)I+35
j service.bhz.TestCommon.initReader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+51
j service.cardOptService.getConnReader()Ljava/lang/String;+16
j frame.CardTest.connBtnActionPerformed(Ljava/awt/event/ActionEvent;)V+15
j frame.CardTest$12.actionPerformed(Ljava/awt/event/ActionEvent;)V+5
j javax.swing.AbstractButton.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+84
j javax.swing.AbstractButton$Handler.actionPerformed(Ljava/awt/event/ActionEvent;)V+5
j javax.swing.DefaultButtonModel.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+35
j javax.swing.DefaultButtonModel.setPressed(Z)V+117
j javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Ljava/awt/event/MouseEvent;)V+35
j java.awt.Component.processMouseEvent(Ljava/awt/event/MouseEvent;)V+64
j javax.swing.JComponent.processMouseEvent(Ljava/awt/event/MouseEvent;)V+23
j java.awt.Component.processEvent(Ljava/awt/AWTEvent;)V+81
j java.awt.Container.processEvent(Ljava/awt/AWTEvent;)V+18
j java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V+566
j java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V+42
J java.awt.LightweightDispatcher.retargetMouseEvent(Ljava/awt/Component;ILjava/awt/event/MouseEvent;)V
j java.awt.LightweightDispatcher.processMouseEvent(Ljava/awt/event/MouseEvent;)Z+139
j java.awt.LightweightDispatcher.dispatchEvent(Ljava/awt/AWTEvent;)Z+50
j java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V+12
j java.awt.Window.dispatchEventImpl(Ljava/awt/AWTEvent;)V+19
j java.awt.Component.dispatchEvent(Ljava/awt/AWTEvent;)V+2
j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+46
J java.awt.EventDispatchThread.pumpOneEventForFilters(I)Z
j java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+30
j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11
j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
j java.awt.EventDispatchThread.run()V+9
v ~StubRoutines::call_stub
V [jvm.dll+0xf049c]
V [jvm.dll+0x17fcf1]
V [jvm.dll+0xf0667]
V [jvm.dll+0xf06dd]
V [jvm.dll+0x11a2a0]
V [jvm.dll+0x1ddb14]
V [jvm.dll+0x17f96c]
C [MSVCR71.dll+0x9565]
C [kernel32.dll+0xb713]Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j com.sun.jna.Memory.malloc(J)J+0
j com.sun.jna.Memory.<init>(J)V+27
j com.sun.jna.NativeString.<init>(Ljava/lang/String;Z)V+79
j com.sun.jna.Function.convertArgument([Ljava/lang/Object;ILjava/lang/reflect/Method;Lcom/sun/jna/TypeMapper;Z)Ljava/lang/Object;+347
j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+114
j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+341
j $Proxy0.HDR_Initialize(Lcom/sun/jna/ptr/IntByReference;Ljava/lang/String;IJ)I+35
j service.bhz.TestCommon.initReader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+51
j service.cardOptService.getConnReader()Ljava/lang/String;+16
j frame.CardTest.connBtnActionPerformed(Ljava/awt/event/ActionEvent;)V+15
j frame.CardTest$12.actionPerformed(Ljava/awt/event/ActionEvent;)V+5
j javax.swing.AbstractButton.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+84
j javax.swing.AbstractButton$Handler.actionPerformed(Ljava/awt/event/ActionEvent;)V+5
j javax.swing.DefaultButtonModel.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+35
j javax.swing.DefaultButtonModel.setPressed(Z)V+117
j javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Ljava/awt/event/MouseEvent;)V+35
j java.awt.Component.processMouseEvent(Ljava/awt/event/MouseEvent;)V+64
j javax.swing.JComponent.processMouseEvent(Ljava/awt/event/MouseEvent;)V+23
j java.awt.Component.processEvent(Ljava/awt/AWTEvent;)V+81
j java.awt.Container.processEvent(Ljava/awt/AWTEvent;)V+18
j java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V+566
j java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V+42
J java.awt.LightweightDispatcher.retargetMouseEvent(Ljava/awt/Component;ILjava/awt/event/MouseEvent;)V
j java.awt.LightweightDispatcher.processMouseEvent(Ljava/awt/event/MouseEvent;)Z+139
j java.awt.LightweightDispatcher.dispatchEvent(Ljava/awt/AWTEvent;)Z+50
j java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V+12
j java.awt.Window.dispatchEventImpl(Ljava/awt/AWTEvent;)V+19
j java.awt.Component.dispatchEvent(Ljava/awt/AWTEvent;)V+2
j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+46
J java.awt.EventDispatchThread.pumpOneEventForFilters(I)Z
j java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+30
j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11
j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
j java.awt.EventDispatchThread.run()V+9
v ~StubRoutines::call_stub
--------------- P R O C E S S ---------------Java Threads: ( => current thread )
0x03688000 JavaThread "TimerQueue" daemon [_thread_blocked, id=1512, stack(0x03da0000,0x03df0000)]
=>0x0357c400 JavaThread "AWT-EventQueue-0" [_thread_in_native, id=1756, stack(0x03850000,0x038a0000)]
0x0357ac00 JavaThread "AWT-Windows" daemon [_thread_in_native, id=1088, stack(0x03800000,0x03850000)]
0x03599400 JavaThread "AWT-Shutdown" [_thread_blocked, id=2696, stack(0x037b0000,0x03800000)]
0x03598400 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=2064, stack(0x03760000,0x037b0000)]
0x0323a000 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=3612, stack(0x034b0000,0x03500000)]
0x03233c00 JavaThread "CompilerThread0" daemon [_thread_blocked, id=264, stack(0x03460000,0x034b0000)]
0x03232400 JavaThread "Attach Listener" daemon [_thread_blocked, id=644, stack(0x03410000,0x03460000)]
0x03250400 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=1872, stack(0x033c0000,0x03410000)]
0x031ed400 JavaThread "Finalizer" daemon [_thread_blocked, id=2560, stack(0x03370000,0x033c0000)]
0x031ebc00 JavaThread "Reference Handler" daemon [_thread_blocked, id=3672, stack(0x03320000,0x03370000)]
0x00e37000 JavaThread "main" [_thread_blocked, id=3892, stack(0x00040000,0x00090000)]Other Threads:
0x031ea800 VMThread [stack: 0x032d0000,0x03320000] [id=1688]
0x0323fc00 WatcherThread [stack: 0x03500000,0x03550000] [id=3616]VM state:not at safepoint (normal execution)VM Mutex/Monitor currently owned by a thread: NoneHeap
def new generation total 4928K, used 1562K [0x229e0000, 0x22f30000, 0x27f30000)
eden space 4416K, 27% used [0x229e0000, 0x22b13c08, 0x22e30000)
from space 512K, 64% used [0x22eb0000, 0x22f02dd0, 0x22f30000)
to space 512K, 0% used [0x22e30000, 0x22e30000, 0x22eb0000)
tenured generation total 10944K, used 4351K [0x27f30000, 0x289e0000, 0x329e0000)
the space 10944K, 39% used [0x27f30000, 0x2836fe90, 0x28370000, 0x289e0000)
compacting perm gen total 12288K, used 8749K [0x329e0000, 0x335e0000, 0x369e0000)
the space 12288K, 71% used [0x329e0000, 0x3326b5d0, 0x3326b600, 0x335e0000)
ro space 10240K, 51% used [0x369e0000, 0x36f0ae00, 0x36f0ae00, 0x373e0000)
rw space 12288K, 54% used [0x373e0000, 0x37a772d8, 0x37a77400, 0x37fe0000)Dynamic libraries:
0x00400000 - 0x00431000 C:\Documents and Settings\yy\桌面\cardTest.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
0x77180000 - 0x77283000 C:\WINDOWS\WinSxS\X86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\COMCTL32.DLL
0x77be0000 - 0x77c38000 C:\WINDOWS\system32\msvcrt.dll
0x77ef0000 - 0x77f39000 C:\WINDOWS\system32\GDI32.dll
0x77d10000 - 0x77da0000 C:\WINDOWS\system32\USER32.dll
0x77f40000 - 0x77fb6000 C:\WINDOWS\system32\SHLWAPI.dll
0x7d590000 - 0x7dd84000 C:\WINDOWS\system32\SHELL32.DLL
0x76300000 - 0x7631d000 C:\WINDOWS\system32\IMM32.DLL
0x62c20000 - 0x62c29000 C:\WINDOWS\system32\LPK.DLL
0x73fa0000 - 0x7400b000 C:\WINDOWS\system32\USP10.dll
0x5adc0000 - 0x5adf7000 C:\WINDOWS\system32\uxtheme.dll
0x009c0000 - 0x00a50000 C:\Program Files\360\360safe\safemon\safemon.dll
0x76990000 - 0x76acd000 C:\WINDOWS\system32\ole32.dll
0x770f0000 - 0x7717b000 C:\WINDOWS\system32\OLEAUT32.dll
0x762f0000 - 0x762f5000 C:\WINDOWS\system32\MSIMG32.dll
0x75ff0000 - 0x76055000 C:\WINDOWS\system32\MSVCP60.dll
0x3e410000 - 0x3e4f6000 C:\WINDOWS\system32\WININET.dll
0x00a60000 - 0x00a69000 C:\WINDOWS\system32\Normaliz.dll
0x43ce0000 - 0x43e13000 C:\WINDOWS\system32\urlmon.dll
0x3eab0000 - 0x3ec98000 C:\WINDOWS\system32\iertutil.dll
0x76bc0000 - 0x76bcb000 C:\WINDOWS\system32\PSAPI.DLL
0x77bd0000 - 0x77bd8000 C:\WINDOWS\system32\VERSION.dll
0x71a20000 - 0x71a37000 C:\WINDOWS\system32\WS2_32.dll
0x71a10000 - 0x71a18000 C:\WINDOWS\system32\WS2HELP.dll
0x74680000 - 0x746cc000 C:\WINDOWS\system32\MSCTF.dll
0x76d70000 - 0x76d92000 C:\WINDOWS\system32\apphelp.dll
0x73640000 - 0x7366e000 C:\WINDOWS\system32\msctfime.ime
0x10000000 - 0x10019000 C:\WINDOWS\system32\btmmhook.dll
0x6d800000 - 0x6da97000 c:\program files\java\jre6\bin\client\jvm.dll
0x76b10000 - 0x76b3a000 C:\WINDOWS\system32\WINMM.dll
0x7c340000 - 0x7c396000 C:\WINDOWS\system32\MSVCR71.dll
0x6d7b0000 - 0x6d7bc000 c:\program files\java\jre6\bin\verify.dll
0x6d330000 - 0x6d34f000 c:\program files\java\jre6\bin\java.dll
0x6d290000 - 0x6d298000 c:\program files\java\jre6\bin\hpi.dll
0x6d7f0000 - 0x6d7ff000 c:\program files\java\jre6\bin\zip.dll
0x6d000000 - 0x6d14a000 C:\Program Files\Java\jre6\bin\awt.dll
0x72f70000 - 0x72f96000 C:\WINDOWS\system32\WINSPOOL.DRV
0x6d230000 - 0x6d284000 C:\Program Files\Java\jre6\bin\fontmanager.dll
0x6d610000 - 0x6d623000 C:\Program Files\Java\jre6\bin\net.dll
0x6d630000 - 0x6d639000 C:\Program Files\Java\jre6\bin\nio.dll
0x719c0000 - 0x719fe000 C:\WINDOWS\system32\mswsock.dll
0x60fd0000 - 0x61025000 C:\WINDOWS\system32\hnetcfg.dll
0x71a00000 - 0x71a08000 C:\WINDOWS\System32\wshtcpip.dll
0x76ef0000 - 0x76f17000 C:\WINDOWS\system32\DNSAPI.dll
0x76f80000 - 0x76f88000 C:\WINDOWS\System32\winrnr.dll
0x76f30000 - 0x76f5c000 C:\WINDOWS\system32\WLDAP32.dll
0x16080000 - 0x16099000 C:\Program Files\Bonjour\mdnsNSP.dll
0x76d30000 - 0x76d48000 C:\WINDOWS\system32\Iphlpapi.dll
0x76f90000 - 0x76f96000 C:\WINDOWS\system32\rasadhlp.dll
0x68000000 - 0x68036000 C:\WINDOWS\system32\rsaenh.dll
0x759d0000 - 0x75a7f000 C:\WINDOWS\system32\USERENV.dll
0x5fdd0000 - 0x5fe25000 C:\WINDOWS\system32\netapi32.dll
0x04270000 - 0x042c4000 C:\Documents and Settings\yy\Local Settings\Temp\jna1259562623130270810.dll
0x042d0000 - 0x042e0000 C:\Documents and Settings\yy\桌面\HDReader.dll
0x042f0000 - 0x04312000 C:\WINDOWS\system32\dcrf32.dll
0x68be0000 - 0x68be9000 C:\WINDOWS\system32\HID.DLL
0x76060000 - 0x761b6000 C:\WINDOWS\system32\SETUPAPI.dll
0x76c00000 - 0x76c2e000 C:\WINDOWS\system32\WINTRUST.dll
0x765e0000 - 0x76673000 C:\WINDOWS\system32\CRYPT32.dll
0x76db0000 - 0x76dc2000 C:\WINDOWS\system32\MSASN1.dll
0x76c60000 - 0x76c88000 C:\WINDOWS\system32\IMAGEHLP.dllVM Arguments:
jvm_args: -Dexe4j.semaphoreName=c:_documents and settings_yy_桌面_cardtest.exe0 -Dexe4j.moduleName=C:\Documents and Settings\yy\桌面\cardTest.exe -Dexe4j.tempDir=C:\DOCUME~1\Wangyy\LOCALS~1\Temp\e4j96.tmp_dir21531 -Dexe4j.unextractedPosition=10881102 -Dexe4j.consoleCodepage=cp0
java_command: <unknown>
Launcher Type: genericEnvironment Variables:
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_16
PATH=C:\Program Files\Borland\Delphi7\Bin;C:\Program Files\Borland\Delphi7\Projects\Bpl\;C:\Inprise\vbroker\bin;C:\PROGRA~1\Borland\CBUILD~1\Bin;C:\PROGRA~1\Borland\CBUILD~1\Projects\Bpl;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\ThinkPad Wireless LAN Adapter Software;C:\Program Files\Wise Installation System;C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft Visual Studio\VC98\bin;C:\Program Files\Java\jdk1.6.0_16\bin;D:\myEclipseSpace\springside-3.3.1\tools\maven\apache-maven-2.2.1\bin;D:\myEclipseSpace\springside-3.3.1\tools\ant\apache-ant-1.7.1\bin;c:\program files\java\jre6\bin
USERNAME=Wangyy
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel
TestCommon comm = new TestCommon();
String methodName = entity.getElementName();
if(null == methodName || methodName == ""){
methodName = "sendApdu";
}
String[] param = entity.getElementParam();
String rst = entity.getElementRst();
try {
Method[] methods = comm.getClass().getMethods();
int i = 0;
for (i = 0; i < methods.length; i++) {
if (methods[i].getName().equals(methodName))
break;
}
//执行方法之前检查传入的参数中是否存在变量值,如果存在将其替换。
// for (String str : param) {
// str = parseParam(str);
// }
for (int j = 0; j < param.length; j++) {
param[j] = parseParam(param[j]);
System.out.println(param[j]);
}
String a = (String) methods[i].invoke(comm, param);
entity.setRstValue(a);
System.out.println(a);
// 在var的map中查找已经存在的变量,如果变量存在,更新变量值保存。
if (null != rst && rst != "" && rst.contains("${")) {
rst = rst.substring(2,rst.length()-1);
if (varMap.containsKey(rst)) {
varMap.put(rst, a);
}
}
} catch (IllegalAccessException e) {
System.out.println("连接失败");
e.printStackTrace();
} catch (IllegalArgumentException e) {
System.out.println("参数错误");
System.out.println(methodName);
for (int j = 0; j < param.length; j++) {
param[j] = parseParam(param[j]);
System.out.println("参数是:" + param[j]);
}
e.printStackTrace();
} catch (InvocationTargetException e) {
System.out.println("引入失败");
e.printStackTrace();
} catch (SecurityException e) {
System.out.println("安全问题");
e.printStackTrace();
}
}
==================================================================
下面为调用的testComm中的代码
public void readerCheck(String pcReadList, byte[] lpRlstLen) {
TestReaderInf.ReaderCLibrary.READERINSTANCE.HDR_CheckStatus(pcReadList,
lpRlstLen);
System.out.println(pcReadList);
}
==============================================================
JNA的接口定义
public class TestReaderInf { //private static final int CardSeat = 0; // 卡座号 public interface ReaderCLibrary extends Library {
ReaderCLibrary READERINSTANCE = (ReaderCLibrary) Native
.loadLibrary("HDReader", ReaderCLibrary.class);
public int HDR_CheckStatus(String pcReadList, byte[] lpRlstLen);
}================================================================
JNA的接口调用public class TestReader {
private IntByReference devNo; public String[] getReaderList() {
String[] readers = new String[20];
String readerStr = "";
byte[] length = new byte[300];
flag = TestReaderInf.ReaderCLibrary.READERINSTANCE.HDR_CheckStatus(readerStr,
length); if (flag != S_CARD_SUCCESS) {
return null;
} else {
readers = new String(readerStr).split("\0");
System.out.println(String.valueOf(readerStr));
}
return readers;
}
}