Извлечь и загрузить DLL из JAR - PullRequest
14 голосов
/ 22 января 2011

Мое Java-приложение использует библиотеку DLL.Как я могу заставить его работать из файла JAR?

DLL находится в папке с исходными файлами проекта.Я должен включить его в мой JAR, извлечь его во время выполнения (в том же каталоге jar) и загрузить его.

Ответы [ 2 ]

25 голосов
/ 22 января 2011

Вам нужно поместить dll в путь к вашей библиотеке ( рекомендуется ), прежде чем пытаться загрузить ее. так что вам придется извлечь его из jar и скопировать в путь lib.

private static void loadLib(String path, String name) {
  name = System.mapLibraryName(name); // extends name with .dll, .so or .dylib
  try {
        InputStream in = ACWrapper.class.getResourceAsStream("/"+path + name);
        File fileOut = new File("your lib path");
        OutputStream out = FileUtils.openOutputStream(fileOut);
        IOUtils.copy(in, out);
        in.close();
        out.close();
        System.load(fileOut.toString());//loading goes here
   } catch (Exception e) {
               //handle
   }
}

Примечание: ACWrapper - это класс, содержащий статический метод

0 голосов
/ 19 сентября 2012
try {
  InputStream in = Main.class.getResourceAsStream("/example-input.dll");

  File fileOut = new File("./example-output.dll");

  DataOutputStream writer = new DataOutputStream(new FileOutputStream(fileOut));

  long oneChar = 0;
  while((oneChar = in.read()) != -1){
    writer.write((int)oneChar);
  }

  in.close();
  writer.close();
} 
catch (Exception e) {
  e.printStackTrace();
}
...