[英]Java - write dll files from inside a jar to the hard drive?
我有一個已簽名的applet,我想寫出包含在我啟動applet的jar中的dll文件。
我這樣做是因為我想在dll上做一個System.load,因為顯然你無法從applet中的jar內部加載DLL。
第二個問題是如果你可以在applet中添加環境變量 - 例如我想將我的DLL提取到硬盤驅動器的位置並添加環境變量,以便System.load可以找到它。
您應該能夠通過以下方式實現此目的:
.dll
從applet jar提取到系統臨時目錄中。 AccessController
在提取的文件上調用System.load(..)
。 這種方法可以避免設置環境變量的需要。 這是一些示例代碼:
AccessController.doPrivileged(new PrivilegedAction<Void>() {
public Void run() {
String dllName = "my.dll";
File tmpDir = new File(System.getProperty("java.io.tmpdir"));
File tmpFile = new File(tmpDir, dllName);
try {
InputStream in = getClass().getResourceAsStream(dllName);
OutputStream out = new FileOutputStream(tmpFile);
byte[] buf = new byte[8192];
int len;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
in.close();
out.close();
System.load(tmpFile.getAbsolutePath());
} catch (Exception e) {
// deal with exception
}
return null;
}
});
如果用戶有下一代插件2 JRE,那么。 可以使用Java Web Start嵌入applet。 JWS可以輕松地將本機添加到應用程序或applet的運行時類路徑中。
如果用戶沒有插件2 JRE,您仍然可以使用JWS啟動applet(自由浮動)。
如果使用JWS部署,則不必設置環境變量。
看看JNA,這可能會解決您的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.