簡體   English   中英

Java - 將jar內的dll文件寫入硬盤?

[英]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可以找到它。

您應該能夠通過以下方式實現此目的:

  1. .dll從applet jar提取到系統臨時目錄中。
  2. 使用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,這可能會解決您的問題

http://jna.java.net/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM