日期:2014-05-17  浏览次数:20748 次

JaveWeb用Applet加载Dll文件如何实现?
最近在搞一个B/S结构的银行项目,要利用IC读卡器获取卡号,DLL文件放在了项目src下,接口文件如下:

import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;
public class DllGetCardno {
public interface JNATestDll extends StdCallLibrary {  
JNATestDll instanceDll  = (JNATestDll)Native.loadLibrary("libCCIDSource",JNATestDll.class);  
public void  GetLastErrInfo(String lastErr);
public int  GetCardNumber(byte[] cardNumber);

}

然后applet文件调接口,解析获取的卡号:

public void init() {
System.out.println("init");
JNATestDll.instanceDll.GetCardNumber(a);
System.out.println("loaddll");
String cardnum = "";
for(int i = 0;i<a.length;i++){
if("0".equals(a[i])){
break;
}
if("48".equals(a[i])|| a[i]==48){
cardnum = cardnum+"0";
}else if("49".equals(a[i])|| a[i]==49){
cardnum = cardnum+"1";
}else if("50".equals(a[i])|| a[i]==50){
cardnum = cardnum+"2";
}else if("51".equals(a[i])|| a[i]==51){
cardnum = cardnum+"3";
}else if("52".equals(a[i])|| a[i]==52){
cardnum = cardnum+"4";
}else if("53".equals(a[i])|| a[i]==53){
cardnum = cardnum+"5";
}else if("54".equals(a[i])|| a[i]==54){
cardnum = cardnum+"6";
}else if("55".equals(a[i])|| a[i]==55){
cardnum = cardnum+"7";
}else if("56".equals(a[i])|| a[i]==56){
cardnum = cardnum+"8";
}else if("57".equals(a[i])|| a[i]==57){
cardnum = cardnum+"9";
}
}
System.out.println(cardnum);
}

当接口里的load路径写成静态的,如“D:\\libCCIDSource”的时候,eclipse内单执行applet文件可以输出正确的卡号,但是打包成jar文件后在jsp页面执行就报错了。
jsp页面:

<html>
<body>
<applet id="hh" alt="Applet" width="300" height="300" 
code="publics.MyApplet.class" 
archive="applet.jar,jna-3.5.1.jar,platform.jar"
codebase="." mayscript>
</applet> 
</body>
</html>

报错如下:

java控制台输出init,后面的loaddll没有,所以我觉得是加载dll失败了。
请教用过applet调用dll串口的大神们,指点指点,已经花了很长时间了,都没研究出来。
applet dll jni

------解决方案--------------------
不要把dll打在jar包里,访问不到dll的!我研究过这个问题。
放jar包外面。
具体研究看这里:http://blog.csdn.net/withiter/article/details/11924095