java 加载dll后打包_让Jacob从当前路径读取dll文件及相关打包方法

本文介绍如何让Jacob从当前路径读取dll文件,提供修改后的LibraryLoader类代码,避免将dll复制到系统文件夹。同时,讲解使用j2ewiz工具将Java项目打包成exe文件的步骤,并讨论隐藏class文件的选项。
摘要由CSDN通过智能技术生成

让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中这样导出:

330f906a8c0245079d38db8b69c88786.png

出现的是一个jar文件和一个库文件夹:e2aa72f5fdc79ebb6cb9b18f858ad891.png

然后打开j2ewiz:

412af5949ccfae339a5e8d0e2c3cc6c1.png

然后选择“浏览JAR…”或者你用好压将Jar文件提前解压那么这时就可以选择“选择目录…”:

d912e100c67399f42421bb2fede1f0cb.png

接下来都是相应的选择;

这里还可以隐藏class,就是当你生成exe文件后,你用好压打开也看不见你的class:

(慎重选择隐藏功能,否则可能读取不到某些路径的文件)

bf3319abd4f337f123c276d254862948.png

最后就可生成exe文件:bc1da5c8b840fbf10e6c844c3dc9faee.png图标可自己设定。

接着将exe文件、依赖库文件夹、以及其它资源文件打包压缩:

f8ecfdb914598661eb59cf39537a30e7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值