让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文件及相关打包方法相关推荐

  1. 让Jacob从当前路径读取dll文件及相关打包方法

    让Jacob从当前路径读取dll文件及相关打包方法 独立观察员2013.08.12 Jacob  LibraryLoader.class  修改版代码 功能:让jacob可在当前路径下的dll文件夹内 ...

  2. 页面加载成功后调用_在微信小程序里实现图片预加载组件

    网页中的图片预加载 我们知道在 Web 页面中实现图片的预加载其实很简单,通常的做法是在 JS 中使用 Image 对象即可,代码大致如下 var image = new Image() image. ...

  3. java加载并运行虚拟机_《深入理解Java虚拟机》- Java虚拟机是如何加载Java类的?...

    Java虚拟机是如何加载Java类的?  这个问题也就是面试常问到的Java类加载机制.在年初面试百战之后,菜鸟喜鹊也是能把这流程倒背如流啊!但是,也只是字面上的背诵,根本就是像上学时背书考试一样. ...

  4. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 )

    文章目录 前言 一.RawDexFile.cpp 中 dvmRawDexFileOpen() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DexClassLoader 加载 ...

  5. java加载c库阻塞_【死磕Java並發】-----J.U.C之阻塞隊列:DelayQueue

    DelayQueue是一個支持延時獲取元素的無界阻塞隊列.里面的元素全部都是"可延期"的元素,列頭的元素是最先"到期"的元素,如果隊列里面沒有元素到期,是不能從 ...

  6. 使用HTML+CSS实现网页loading加载效果,支持定时或加载完成后隐藏

    网页使用loading可以给用户带来更好的体验,避免网页渲染中长时间出现网页整体空白从而影响访客的体验,loading在部分大型APP也有在应用. 下面使用HTML+CSS+JS实现完整的Loadin ...

  7. java加载机制_详解Java类加载机制

    一:ClassLoader 从JVM结构图中可以看到,类加载器的作用是将Java类文件加载到Java虚拟机. HotSpot JVM结构,图片来自Java Garbage Collection Bas ...

  8. Windbg加载dump的时候报”Failed to load data access DLL, 0x80004005”错误

    Windbg加载dump的时候报"Failed to load data access DLL, 0x80004005"错误 "Failed to load data a ...

  9. java加载一个来自项目之外的java文件,执行其main方法的一种实现方式

    目录 写在前面 代码实现思路 代码具体实现 写在前面 近期有一个小想法,就是我一个springboot项目,想做一个给用户可以编写java代码并且直接在页面运行的功能. 难点就在于,如何将java文本 ...

最新文章

  1. 连接函数vc++笔记---CDatabase类
  2. c#v2.0 扩展特性 翻译(1)
  3. 物联网处理器定义混沌不明,市场尚未成熟
  4. 界面无小事(八):RecyclerView增删item
  5. python矩阵中的冒号:
  6. 试分别简述udp和tcp的特点_技术帖:污水处理中曝气设备的分类及特点小结
  7. 设计模式-04-行为型模式详解
  8. Android 手机进入不了fastboot模式的解决方案
  9. java将数字转为大写(1转为一)
  10. 关键路径过程详解、算法及其实现
  11. wordpress漏洞工具_打击WordPress中的垃圾评论的12个重要提示和工具
  12. java 社会统一信用代码分解,获取登记管理部门代码、机构类别代码、登记管理机关行政区划码、 主体标识码、校验码
  13. 鸿蒙阴阳星辰塔,第1298章鸿蒙星辰塔的新能力
  14. [转载] 那些极度自律的孩子, 都拥有了开挂的人生
  15. 移动开发者大会 -- 后感
  16. 网上搜索电子书的办法
  17. USACO1996《修理牛棚》解题报告
  18. 2022.08.03 第三组 高小涵
  19. 新闻信息传播的新平台——微博初探
  20. 区块链技术在金融业KYC监管中的应用

热门文章

  1. Android studio 文件包名连在一起的处理方法
  2. Java开发工具简介
  3. 两下或多下回车造成数据库多次提交事物的解决方法
  4. Python——Entry、Text控件
  5. 对大学生学习Linux系统的七项实用建议
  6. linux的mount(挂载)命令
  7. HDFS文件读写流程
  8. 无边框窗体和用户控件以及权限
  9. poj2002 hash+数学
  10. 十五天精通WCF——第六天 你必须要了解的3种通信模式