Java - записать DLL-файлы изнутри банки на жесткий диск? - PullRequest
8 голосов
/ 31 марта 2011

У меня есть подписанный апплет, и я хочу выписать dll-файлы, которые содержатся в jar-файле, из которого я запускаю свой апплет.

Я делаю это, потому что затем я хочу сделать System.load наDLL, так как, очевидно, вы не можете загрузить DLL из JAR внутри апплета.

Вторая проблема - если вы можете добавить переменные окружения в апплете - например, я хочу извлечь мои DLL-файлы в место на жестком диске и добавить переменную окружения, чтобы System.load мог ее найти.

Ответы [ 3 ]

6 голосов
/ 04 апреля 2011

Вы должны быть в состоянии выполнить это:

  1. Извлечение .dll из апплета jar во временный системный каталог.
  2. Вызов System.load(..) для извлеченного файла с AccessController.

Такой подход позволит избежать необходимости устанавливать переменную среды. Вот пример кода:

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;
    }
});
0 голосов
/ 05 апреля 2011

Посмотрите на JNA, это может решить вашу проблему

http://jna.java.net/

0 голосов
/ 04 апреля 2011

Если у пользователя есть Next Generation plug-in2 JRE, то. апплет может быть встроен с помощью Java Web Start . JWS позволяет легко добавлять нативы в путь к классам приложений или апплетов во время выполнения.

Если у пользователя нет подключаемого модуля 2 JRE, вы все равно можете запустить апплет (свободно плавающий) с помощью JWS.

При развертывании с использованием JWS установка переменных среды не требуется.

...