【问题标题】:no jaybird [dll] in java.library.pathjava.library.path 中没有 jaybird [dll]
【发布时间】:2012-08-10 16:04:45
【问题描述】:

使用嵌入式 firebird 导出我的 java 项目时,我在控制台中收到以下消息: “java.library.path 中没有 jaybird [22 [任何版本,我猜]]”。

但它实际上是在我的项目的库路径上,自引用到我的工作区。我尝试了很多解决方法,例如

System.LoadFile("jaybird22.dll") //full uri, just the name of the dll, nada
System.Load("jaybird22.dll") //full uri, just the name of the dll, nada

或将 dll 插入用户库中 或将 dll 作为引用库放在另一个文件夹中。

这真的让我很紧张。 如何解决此错误? JNI?

【问题讨论】:

    标签: java desktop-application dll firebird2.5


    【解决方案1】:

    解决方案

    好的,这是解决此问题的方法。问题是在 jar 中没有 dll 或任何包含文件的文件夹都被打包在 jar 中。因此,几乎每个 dll、带有图像的文件夹或任何必须在可运行 jar 所在的文件夹中的东西。 jar 中唯一打包的是外部 jar 和用于运行软件的 .java 文件。

    无论如何,使用 Firebird 嵌入模式是相当棘手的。由于 jaybird(SOME_VERSION).dll 必须放在所有 .dll、.msg 文件旁边。但是JVM会要求jaybird dll在java.library.path中,当然也只是system32和一些与程序无关的java文件夹。

    因此,为了让您的程序将可运行的 jar 文件夹检测为 java.library.path(实际上应该称为路径),jaybird dll 文件和其他 firebird 文件和文件夹在哪里,您将这些 LOC 放在 main 方法中:

    String decodedPath =URLDecoder.decode(ClassLoader.getSystemClassLoader().getResource(".").getPath(), "UTF-8");
    decodedPath=decodedPath.substring(1, decodedPath.length()-1).replaceAll("/", "\\\\");
    System.setProperty("java.library.path",decodedPath+";"+System.getProperty("java.library.path")));
    

    我为库路径选择了以前的目录,因为我只是将它添加到列表中。

    请注意,这些 LOC 必须在 ANY CODE 之前,这也包括调用构造函数。如果您使用的是全局静态模块或 JNI 调用,请注意。

    我希望这可以节省一些人的时间,我已经失去了 12 个小时的工作来试图正确地解决这个问题。

    如果管理员不删除我的编辑或自行回答此问题,我将不胜感激。

    快乐编码 =D

    【讨论】:

      猜你喜欢
      • 2016-09-04
      • 2011-07-02
      • 2010-10-29
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2018-07-05
      相关资源
      最近更新 更多