[英]How to load resources from within a jar file loaded in a java application?
[英]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已經內置了對分區和加載本機的支持。
resources
部分。 每個OS只會下載用於它的資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.