我有一个C ++库,我已经为OS X,Windows& Unix的。对于每一个,我在Eclipse中创建了一个单独的项目,并使用名称约定导出它们: 的库OS.jar 即可。
每个jar基本上都包含:
库OS.jar |
- > library.ext
我的想法是从我的主Jar小程序中通过将它们提取到临时位置并使用system.loadlibrary来加载它们。
不幸的是我不知道如何获取资源。
我试图用它来做 Extract and load DLL from JAR 但它是针对相对路径而不是在线浏览器小程序。
所以我的问题是如何根据客户端的操作系统加载C库。我正在使用JNI与它交谈,而且它也在一个单独的JAR中加载库。我正在调查JNLP,但如果我使用JNLP,我不知道如何获得Jar名称。 :/
修改
public static void loadJarDll(String name) throws IOException {
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
byte[] buffer = new byte[1024];
int read = -1;
File temp = new File(new File(System.getProperty("java.io.tmpdir")), name);
FileOutputStream fos = new FileOutputStream(temp);
while((read = in.read(buffer)) != -1) {
fos.write(buffer, 0, read);
}
fos.close();
in.close();
System.load(temp.getAbsolutePath());
}
这是我目前正在使用的代码。为了加载库,我传递了 name 变量,该变量必须包含库的扩展名。我想要做的只是请求库的每个操作系统的通用名称(如果它是用于windows的foobar.dll和用于unix的foobar.so,只需在加载时将其称为foobar)。我想像这样加载它,因为当我使用JNLP时,我将只有一个JAR包含该特定操作系统和平台的本机库。
答案 0 :(得分:1)
Java Web Start已经内置了对分区和加载本机的支持。
resources
部分。每个操作系统只下载用于它的资源。