【问题标题】:Extract and load DLL from JAR从 JAR 中提取和加载 DLL
【发布时间】:2011-06-13 10:56:18
【问题描述】:

我的 Java 应用程序使用 DLL 库。如何从 JAR 文件中获取它?

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

【问题讨论】:

    标签: java dll jar java-native-interface


    【解决方案1】:

    在您尝试加载它之前,您需要将 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是持有静态方法的类

    【讨论】:

    • 编译器找不到 FileUtils 和 IOUtiles
    • 你需要在你的类路径中添加commons-io jar
    • System.getProperty("java.library.path"); //win机我记得是C:\\windows\\system32
    • 我在线程 "main" java.lang.UnsatisfiedLinkError: no j3dcore-ogl in java.library.path 中遇到异常 :(
    • 这只是表示该dll没有被提取到lib路径。
    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多