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”);

}

}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springboot框架的理解_谈谈你对springmvc的理解

    springboot框架的理解_谈谈你对springmvc的理解1.起源SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像Maven整合了所有的Jar包,SpringBoot整合了所有的框…

    2022年8月20日
    5
  • 485转网口的moxa(虚拟机com口和主机com口)

    影响我们一生百倍差距的四大效应观察者效应:你的世界是什么样是由你的观察决定的.这个效应是在【潜能突破】研习营课堂上发现的,我们有个练习叫三生万物,每个人都会成为一次观察者角色,当大家在成为其他角色时,他们总是发现不了自己的问题,无论我们怎样提醒都没有用,无法改变原有的模式,当他们进入观察者模式,看见其他人的行为所造成的后果时,立刻恍然大悟,主动注意自己的形为,在当下立刻发生改变.刚开始我以为这是个…

    2022年4月17日
    51
  • linux中复制文件夹到另一个文件夹(linux cp 复制文件夹)

    cp-Rf/home/user/*/root/temp/将user文件夹下面的所有复制到temp文件夹里

    2022年4月11日
    49
  • Java并发——线程同步Volatile与Synchronized详解

    Java并发——线程同步Volatile与Synchronized详解Java面试——线程同步volatile与synchronized详解0.前言面试时很可能遇到这样一个问题:使用volatile修饰int型变量i,多个线程同时进行i++操作,这样可以实现线程安全吗?提到线程安全、线程同步,我们经常会想到两个关键字:volatile和synchronized,那么这两者有什么区别呢?1.volatile与synchronized介绍volatile是变量修

    2022年7月11日
    18
  • uboot启动过程详解

    uboot启动过程详解

    2022年3月2日
    32
  • ora00904::标识符无效_ora-00911 无效字符

    ora00904::标识符无效_ora-00911 无效字符ORA:即Oracle报错。标识符无效:SQL语句中,这个字段名不在表中。解决方案:修改SQL语句中对应的字段或者修改表里面对应的列名。在这里我想说一下,因为我用的是hibernate内部封装好的save方法,咱也不能去改人家的底层方法是不是,所以我在这里用到一个注解(@Column)去指定SQL要执行的字段我第一次用的时候放在了这里↑但是没什么效果,然后我就把这个注解(@Column)放到getset方法上,问题就解决了。我的问题已经解决,也希望能帮到大家。…

    2025年8月3日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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