一尘不染

从JAR提取并加载DLL

java

我的Java应用程序使用DL​​L库。我如何从JAR文件中使用它?

DLL位于项目的源文件夹中。我必须将其包含在我的JAR中,在运行时将其提取(在jar的同一目录中)并加载它。


阅读 458

收藏
2020-03-17

共1个答案

一尘不染

尝试加载dll之前,需要将dll放入库路径(推荐)。因此你将不得不从jar中提取它并将其复制到lib path中。

private void loadLib(String path, String name) {
  name = System.mapLibraryName(name); // extends name with .dll, .so or .dylib
  InputStream inputStream = null;
  OutputStream outputStream = null;
  try {
    inputStream = getClass().getResourceAsStream("/" + path + name);
    File fileOut = new File("your lib path");
    outputStream = new FileOutputStream(fileOut);
    IOUtils.copy(inputStream, outputStream);

    System.load(fileOut.toString());//loading goes here
  } catch (Exception e) {
    //handle
  } finally {
    if (inputStream != null) {
      try {
        inputStream.close();
      } catch (IOException e) {
        //log
      }
    }
    if (outputStream != null) {
      try {
        outputStream.close();
      } catch (IOException e) {
        //log
      }
    }
  }
}

注意: ACWrapper是持有静态方法的类

2020-03-17