如何从浏览器加载的JAR文件加载库?

时间:2014-11-09 02:48:54

标签: java browser applet java-web-start jnlp

我有一个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包含该特定操作系统和平台的本机库。

1 个答案:

答案 0 :(得分:1)

Java Web Start已经内置了对分区和加载本机的支持。

  1. 分区:将Jar添加到特定于系统的resources部分。每个操作系统只下载用于它的资源。
  2. 加载:将原生代码放在上面提到的Jar的根目录中,它将被解压缩并放置在应用程序的运行时类路径中。