java 加载dll后打包_让Jacob从当前路径读取dll文件及相关打包方法
讓Jacob從當前路徑讀取dll文件及相關打包方法
獨立觀察員2013.08.12
Jacob ?LibraryLoader.class修改版代碼
功能:讓jacob可在當前路徑下的dll文件夾內讀取相關依賴的dll文件,免去復制到系統文件夾的麻煩。
Bug:好像就不會從系統路徑讀取了,難道catch內代碼不執行?期待高手解答。
package com.jacob.com;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.Set;
public final class LibraryLoader
{
publicstatic final String JACOB_DLL_PATH = "jacob.dll.path";
publicstatic final String JACOB_DLL_NAME = "jacob.dll.name";
publicstatic final String JACOB_DLL_NAME_X86 = "jacob.dll.name.x86";
publicstatic final String JACOB_DLL_NAME_X64 = "jacob.dll.name.x64";
publicstatic final String DLL_NAME_MODIFIER_32_BIT = "x86";
publicstatic final String DLL_NAME_MODIFIER_64_BIT = "x64";
publicstatic void loadJacobLibrary()
{
ResourceBundleresources = null;
Setkeys = new HashSet();
try{
resources=ResourceBundle.getBundle(LibraryLoader.class.getName(), Locale.getDefault(),LibraryLoader.class.getClassLoader());
Enumerationi = resources.getKeys();
while(i.hasMoreElements()) {
Stringkey = (String)i.nextElement();
keys.add(key);
}
}
catch(MissingResourceException e)
{
}
try {
Stringpath, name, dir;
path= System.getProperty("user.dir") + "\\dll\\"; ? //先獲取當前目錄下的dll文件夾路徑——dlgcy;
name= getPreferredDLLName();
dir= path + name + ".dll"; ?//加后綴適應load()方法;
JacobObject.debug("Loadinglibrary " + dir + " using System.loadLibrary ");
System.load(dir); ?//使用load()可載入任意絕對路徑下的庫文件;
System.out.println("載入dll文件成功!");
}catch (Exception e) { //原方法;
Stringpath = System.getProperty("jacob.dll.path");
if ((path == null) && (resources !=null) && (keys.contains("jacob.dll.path"))) {
path =(String)resources.getObject("jacob.dll.path");
}
if (path != null) {
JacobObject.debug("Loading library" + path + " using System.loadLibrary ");
System.loadLibrary(path);
}
else {
String name = null;
if(System.getProperty("jacob.dll.name") != null)
name =System.getProperty("jacob.dll.name");
else if((System.getProperty("jacob.dll.name.x86") != null) &&(shouldLoad32Bit()))
{
name = System.getProperty("jacob.dll.name.x86");
} else if((System.getProperty("jacob.dll.name.x64") != null) &&(!shouldLoad32Bit()))
{
name =System.getProperty("jacob.dll.name.x64");
} else if ((resources != null) &&(keys.contains("jacob.dll.name")))
name =resources.getString("jacob.dll.name");
else if ((resources != null) &&(keys.contains("jacob.dll.name.x86")) && (shouldLoad32Bit()))
{
name =resources.getString("jacob.dll.name.x86");
} else if ((resources != null) &&(keys.contains("jacob.dll.name.x64")) &&(!shouldLoad32Bit()))
{
name =resources.getString("jacob.dll.name.x64");
}
else{
name = getPreferredDLLName();
}
JacobObject.debug("Loading library" + name + " using System.loadLibrary ");
System.loadLibrary(name);
}
e.printStackTrace();
}
}
publicstatic String getPreferredDLLName()
{
if(shouldLoad32Bit()) {
return"jacob-" + JacobReleaseInfo.getBuildVersion() + "-" +"x86";
}
return"jacob-" + JacobReleaseInfo.getBuildVersion() + "-" +"x64";
}
protectedstatic boolean shouldLoad32Bit()
{
Stringbits = System.getProperty("sun.arch.data.model", "?");
if(bits.equals("32"))
returntrue;
if(bits.equals("64")) {
returnfalse;
}
Stringarch = System.getProperty("java.vm.name", "?");
if(arch.toLowerCase().indexOf("64-bit") >= 0) {
returnfalse;
}
returntrue;
}
}
使用j2ewiz打包
首先在Eclipse中這樣導出:
出現的是一個jar文件和一個庫文件夾:
然后打開j2ewiz:
然后選擇“瀏覽JAR…”或者你用好壓將Jar文件提前解壓那么這時就可以選擇“選擇目錄…”:
接下來都是相應的選擇;
這里還可以隱藏class,就是當你生成exe文件后,你用好壓打開也看不見你的class:
(慎重選擇隱藏功能,否則可能讀取不到某些路徑的文件)
最后就可生成exe文件:圖標可自己設定。
接著將exe文件、依賴庫文件夾、以及其它資源文件打包壓縮:
總結
以上是生活随笔為你收集整理的java 加载dll后打包_让Jacob从当前路径读取dll文件及相关打包方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java与3d建模_3d建模加载,更新和
- 下一篇: java 中断 继续_关于中断的线程如何