SOLUTION
好吧,这里的解决这个问题。问题是,在jar里面没有dll,也没有任何文件夹被打包在jar里。所以几乎每个dll,包含图片的文件夹或其他文件夹都必须位于可运行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的主方法:
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")));
我concall以前的目录库路径,因为我只是将它添加到列表。
请注意,这些LOC必须在ANY CODE之前,并且还包括调用构造函数。注意你是否使用全局静态模块或JNI调用。
我希望这节省了一些时间,我已经失去了12个小时的工作,试图找出正确的。
我真的很感激,如果管理员不抹去我的编辑或这个问题自我回答。
快乐编码= D