您可以使用 Java 使用 Class.getResourceAsStream() 和 FileOutputStream 以编程方式安装外部库。图书馆通常会进入Java\lib\ext\。
我是这样处理的:
我将我使用的所有 JAR 的副本放入 .res 子包中。从那里,我可以将它们复制到任何地方。
private void installLibraries() {
new Thread() {
@Override
public void run() {
System.out.println("Checking for libraries");
File jre = new File(System.getProperty("java.home"));
File jar = new File(jre, "lib/ext/JAR_NAME.jar");
//Create more File objects that wrap your JAR's
try {
boolean added = false;
if (!jar.exists()) {
copyResource(jar, "JAR_NAME.jar");
added = true;
}
//Repeat for more JAR's
if (added) {
System.out.println("Libraries installed.");
} else {
System.out.println("Library check complete");
} catch (IOException ex) {
System.out.println("Library installation failed.");
ex.printStackTrace(System.out);
}
}
private void copyResource(File dest, String src) throws IOException {
System.out.println("Copying resource " + src + " to " + dest);
InputStream in = THIS_CLASS_NAME.class.getResourceAsStream("/YOUR_PACKAGE/res/" + src);
dest.getParentFile().mkdirs();
FileOutputStream out = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int i = 0;
while ((i = in.read(buffer)) > 0) {
out.write(buffer, 0, i);
}
out.close();
in.close();
}
}.start();
}
在执行任何其他操作之前运行此方法,您可以完全忽略 Netbeans 为您提供的外部 JAR 文件,而只需分发该文件。作为附加说明,我使用这种方法安装了javax.comm,它不喜欢被外部分发。它带有一个 .dll 文件和一个属性文件。这些文件可以使用完全相同的方法安装,但值得注意的是.dll 文件必须放在Java\lib\ 目录中,而属性文件必须放在Java\lib\ 目录中(而不是在\ext 文件夹中)。