簡體   English   中英

如何從瀏覽器加載的JAR文件加載庫?

[英]How to load a library from JAR file loaded from browser?

我有一個為OS X,Windows和Unix編譯的C ++庫。 對於每個項目,我都在Eclipse中創建了一個單獨的項目,並使用約定俗成了它們的名稱: library-OS.jar

每個罐子基本上包含:

library-OS.jar |

-> library.ext

我當時想的是從我的主Jar小程序中加載它們,方法是將它們提取到臨時位置並使用system.loadlibrary。

不幸的是,我不知道如何獲得資源。

我試圖使用“ 提取”並從JAR加載DLL來執行此操作但這是相對路徑而非在線瀏覽器小程序。

所以我的問題是如何基於客戶端的操作系統加載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());
}

這是我當前正在使用的代碼。 為了加載庫,我傳遞了名稱變量,該變量必須包含庫的擴展名。 我想做的只是向每個操作系統請求具有通用名稱的庫(例如,對於Windows是foobar.dll,對於Unix是foobar.so,以便在加載時將其稱為foobar)。 我想這樣加載它,因為當我使用JNLP時,我將只有一個JAR,其中包含該特定OS和平台的本機庫。

Java Web Start已經內置了對分區和加載本機的支持。

  1. 分區:將Jar添加到系統特定resources部分。 每個OS只會下載用於它的資源。
  2. 加載:將本地人放在上述Jar的根中,它將被提取並放置在應用程序的運行時類路徑中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM