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文件及相关打包方法相关推荐
- 让Jacob从当前路径读取dll文件及相关打包方法
让Jacob从当前路径读取dll文件及相关打包方法 独立观察员2013.08.12 Jacob LibraryLoader.class 修改版代码 功能:让jacob可在当前路径下的dll文件夹内 ...
- 页面加载成功后调用_在微信小程序里实现图片预加载组件
网页中的图片预加载 我们知道在 Web 页面中实现图片的预加载其实很简单,通常的做法是在 JS 中使用 Image 对象即可,代码大致如下 var image = new Image() image. ...
- java加载并运行虚拟机_《深入理解Java虚拟机》- Java虚拟机是如何加载Java类的?...
Java虚拟机是如何加载Java类的? 这个问题也就是面试常问到的Java类加载机制.在年初面试百战之后,菜鸟喜鹊也是能把这流程倒背如流啊!但是,也只是字面上的背诵,根本就是像上学时背书考试一样. ...
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 )
文章目录 前言 一.RawDexFile.cpp 中 dvmRawDexFileOpen() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DexClassLoader 加载 ...
- java加载c库阻塞_【死磕Java並發】-----J.U.C之阻塞隊列:DelayQueue
DelayQueue是一個支持延時獲取元素的無界阻塞隊列.里面的元素全部都是"可延期"的元素,列頭的元素是最先"到期"的元素,如果隊列里面沒有元素到期,是不能從 ...
- 使用HTML+CSS实现网页loading加载效果,支持定时或加载完成后隐藏
网页使用loading可以给用户带来更好的体验,避免网页渲染中长时间出现网页整体空白从而影响访客的体验,loading在部分大型APP也有在应用. 下面使用HTML+CSS+JS实现完整的Loadin ...
- java加载机制_详解Java类加载机制
一:ClassLoader 从JVM结构图中可以看到,类加载器的作用是将Java类文件加载到Java虚拟机. HotSpot JVM结构,图片来自Java Garbage Collection Bas ...
- Windbg加载dump的时候报”Failed to load data access DLL, 0x80004005”错误
Windbg加载dump的时候报"Failed to load data access DLL, 0x80004005"错误 "Failed to load data a ...
- java加载一个来自项目之外的java文件,执行其main方法的一种实现方式
目录 写在前面 代码实现思路 代码具体实现 写在前面 近期有一个小想法,就是我一个springboot项目,想做一个给用户可以编写java代码并且直接在页面运行的功能. 难点就在于,如何将java文本 ...
最新文章
- 连接函数vc++笔记---CDatabase类
- c#v2.0 扩展特性 翻译(1)
- 物联网处理器定义混沌不明,市场尚未成熟
- 界面无小事(八):RecyclerView增删item
- python矩阵中的冒号:
- 试分别简述udp和tcp的特点_技术帖:污水处理中曝气设备的分类及特点小结
- 设计模式-04-行为型模式详解
- Android 手机进入不了fastboot模式的解决方案
- java将数字转为大写(1转为一)
- 关键路径过程详解、算法及其实现
- wordpress漏洞工具_打击WordPress中的垃圾评论的12个重要提示和工具
- java 社会统一信用代码分解,获取登记管理部门代码、机构类别代码、登记管理机关行政区划码、 主体标识码、校验码
- 鸿蒙阴阳星辰塔,第1298章鸿蒙星辰塔的新能力
- [转载] 那些极度自律的孩子, 都拥有了开挂的人生
- 移动开发者大会 -- 后感
- 网上搜索电子书的办法
- USACO1996《修理牛棚》解题报告
- 2022.08.03 第三组 高小涵
- 新闻信息传播的新平台——微博初探
- 区块链技术在金融业KYC监管中的应用