java.library.path中没有jaybird [dll]

时间:2012-08-10 16:04:45

标签: java desktop-application dll firebird2.5

使用嵌入式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?

1 个答案:

答案 0 :(得分:2)

<强>解

好的,这是解决这个问题的方法。问题是罐子里面没有dll,也没有带文件的文件夹被打包在jar中。所以几乎每个dll,带有图像的文件夹或其他任何内容都必须位于runnable jar所在的文件夹旁边。 jar中唯一包装的是外部jar和运行软件的.java文件。

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

所以,为了让你的程序检测你的runnable 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必须在任何代码之前,并且还包括调用构造函数。请注意,如果您正在使用全局静态模块或JNI调用。

我希望这可以节省一些时间,我已经失去了12个小时的工作,试图弄清楚这一点。

我真的很感激管理员不会删除我的编辑或这个问题自己回答。

快乐编码= D