我目前使用JNA技术调用C语言编写的DLL操作读卡器,进行卡片的交互工作,
前台的界面使用了Swing制作了简单的界面,但是在运行期间,
总是因为不知名的原因造成JVM 崩溃了。按照我的程序实现,点击按钮就会调用一个test方法,但是点击一次就可以正确执行,
或者2次 3次 多次点击就会造成JVM崩溃。
不知道大家谁能够帮助解决一下这个问题。
或者如果这个跨平台调用出错的时候,JVM仍然可以运行。否则
我的工具是需要成千上万次的点击执行的,以目前的这种状态,JVM挂了 就要重启程序。
给工作带来很大的不便。急切需要大家的帮助! 谢谢 集思广益。

解决方案 »

  1.   

    JNA.......是个啥, 我知道有个JNI这个有很多资料和例子,在谷老师上找吧, 搜索下 JNI使用 ^_^
      

  2.   

    难道在Linux下叫JNI,在windows下就叫JNA了? 呵呵  搂主笔误吧?是内存的关系吗? 用logcat看下报的错吧,也许能知道错在哪。
      

  3.   

    你把DUMP 文件打开。让CRASH 时生成DUMP 文件。 很可能是你那个C DLL 的问题。
      

  4.   

    在报错的日志上看 确实问题都是在调用C的时候执行出现错误,
    每次还都是在同一个位置,但是这个出错的dll是windows的dll。
    还真是难办。或者大家有没有好的java调用dll的方法或者例子之类的。
    谢谢大家了
      

  5.   

    # A fatal error has been detected by the Java Runtime Environment:
    #  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
      

  6.   


    ---------------  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
      

  7.   

    public void execFunc(xmlEntity entity) {
                    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;
    }
    }