把一個開源項目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);
}