java 动态库卸载_java 卸载动态链接库

java 动态库卸载_java 卸载动态链接库importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.util.Iterator;importjava.util.Vector;publicclassFreeDynamicDll{static{//首先确保这些dll文件存在System.load(“c:/test/Decode.dll”);…

大家好,又见面了,我是你们的朋友全栈君。

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Iterator;

import java.util.Vector;

public class FreeDynamicDll {

static {

// 首先确保这些dll文件存在

System.load(“c:/test/Decode.dll”);

}

/**

* 卸载已经装载的dll

*

* @param dllName

* 库名,如Decode.dll

*/

private synchronized void freeDll(String dllName) {

try {

ClassLoader classLoader = this.getClass().getClassLoader();

Field field = ClassLoader.class.getDeclaredField(“nativeLibraries”);

field.setAccessible(true);

Vector libs = (Vector) field.get(classLoader);

Iterator it = libs.iterator();

Object o;

while (it.hasNext()) {

o = it.next();

Field[] fs = o.getClass().getDeclaredFields();

boolean hasInit = false;

for (int k = 0; k < fs.length; k++) {

if (fs[k].getName().equals(“name”)) {

fs[k].setAccessible(true);

String dllPath = fs[k].get(o).toString();

if (dllPath.endsWith(dllName)) {

hasInit = true;

}

}

}

if (hasInit) {

Method finalize = o.getClass().getDeclaredMethod(

“finalize”, new Class[0]);

finalize.setAccessible(true);

finalize.invoke(o, new Object[0]);

it.remove();

libs.remove(o);

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String args[]) {

FreeDynamicDll t = new FreeDynamicDll();

t.freeDll(“Decode.dll”);

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144205.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 动态规划之背包问题——01背包

    动态规划之背包问题——01背包文章目录一、01背包问题二、二维dp数组解决01背包问题1.确定dp数组以及下标的含义2.确定递推公式3.dp数组初始化4.确定遍历顺序5.举例推导dp数组三、一维dp数组解决01背包问题1.确定dp数组以及下标的含义2.一维dp数组的递推公式3.一维dp数组如何初始化4.一维dp数组遍历顺序5.举例推导dp数组四、leetcode例题讲解01背包问题416.分割等和子集1049.最后一块石头的重量II494.目标和474.一和零背包问题中我们常见的就是01背包和完全背包。在l

  • 联通混改 流量大数据及增值业务或将成重点「建议收藏」

    联通混改 流量大数据及增值业务或将成重点

  • excel怎么赋值0和1_excel如何分段赋值

    excel怎么赋值0和1_excel如何分段赋值getCell 获取列 需要用 createCell获取即可。导出报表时,明明是有数据的可就是报空指针异常。排查后发下报表表格没内容时不能用。

  • 能否利用Hadoop搭建完整的云计算平台「建议收藏」

    Hadoop并不完全代表云计算,所以,要用Hadoop搭建完整的云计算平台,答案是不够。我们常说云计算,实际上还是通过计算机的大规模或者说海量处理来为生活中各式各样的人和各行各业服务——所以,核心在“服务”。关于服务,展开来就是常用的那3种(也是事实上的标准):SaaS,PaaS,IaaS。对云计算来说,公有和私有,虚拟和存储,这其实是相对讨论的核心。回头说Hadoop。在Google三大…

  • JSONObject与JSONArray的使用

    JSONObject与JSONArray的使用

    2021年12月14日
  • 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

    使用MySQL Workbench建立数据库,建立新的表,向表中添加数据初学数据库,记录一下所学的知识。我用的MySQL数据库,使用MySQLWorkbench管理。下面简单介绍一下如何使用MySQLWorkbench建立数据库,建立新的表,为表添加数据。  点击上图中的“加号”图标,新建一个连接,    如上图,先输入数据库的账号密码,帐号默认为root,填好密码后点击“OK”,连接就建立好了,建立完成后,会出现一个长方

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号