把一个开源项目ocf打成jar包后,想把它作为applet插件运行于浏览器,但打成的jar要引用一个dll文件,而applet又不能访问服务器资源,所以就在ocf工程中加上了一段在本机创建dll文件的程序,但ocf中引用dll文件的对象为静态对象,所以把新建的文件也命名成静态的,否则运行时会出现文件被其他程序占用的异常。
主要代码如下:
static FileOutputStream fos = null;
static DataOutputStream dos = null;
static File file=null;
static public void loadLib() {
try {
byte[] buf = new byte[2048];
file = new File("d:/ocfpcsc2.dll");
if(file.exists()==false){
file.createNewFile();
fos = new FileOutputStream(file);
dos = new DataOutputStream(fos);
InputStream in = OCFPCSC1.class.getResourceAsStream("ocfpcsc1.dll");
DataInputStream dis = new DataInputStream(new BufferedInputStream(in));
while(dis.read(buf)!=-1){
dos.write(buf,0,buf.length);
}
in.close();
fos.flush();
fos.close();
dos.flush();
dos.close();
opencard.core.util.SystemAccess.getSystemAccess().loadLibrary("d:/ocfpcsc2.dll");
} catch (Exception e) {
e.printStackTrace();
}
}
SystemAccess.java
public static SystemAccess getSystemAccess() {
SystemAccess sys = _registeredSystems.get(Thread.currentThread());
if (sys==null)
return _theSystem;
else return sys;
}
/**
* Link to a native DLL.
*/
public void loadLibrary(String libName) {
//System.out.println("using SystemAccess.loadLibrary()");
//System.loadLibrary(libName);
System.load(libName);
}