解决方案
好的,这是解决此问题的方法。问题是在 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