首页 > 编程语言 >java中tomcat 加载动态库XXX.dll报错“java.lang.UnsatisfiedLinkError: already loaded in another classloader”[su

java中tomcat 加载动态库XXX.dll报错“java.lang.UnsatisfiedLinkError: already loaded in another classloader”[su

时间:2023-07-22 20:35:48浏览次数:37  
标签:lang supermap java dll 报错 loaded iserver 加载

错误:

在Tomcat 项目和supermap iserver war包中使用了相同的supermap java iobject 【四个jar 包】,实际的访问过程如下:

这时候在访问Tomcat的时候,就会出现一个错误:

an exception caught at Environment.loadLibrary(), program will continue running.
java.lang.UnsatisfiedLinkError: Native Library D:\supermap-iobjectsjava-10.2.0\objectsjava\bin\WrapjCore.dll already loaded in another classloader

 

原因:

JVM只允许一个默认的ClassLoader来load native library,并不提供专门的API来unload一个loaded native library,因此无法在我们的重启Web应用的代码中来手工清除已经load的dll,也没有相应的unload native 方法. 


解决方法:

将Tomcat引用超图java object的几个jar放到jre安装目录下 /lib/ext或tomcat/lib下, 注意和iserver相同版本号,含小版本号

解决这个问题其实很简单,放到java的systemLoader可以加载的地方,如lib/ext目录下。然后,项目中 仍然去调用此代码。由于访问dll的代码由systemLoader加载,因此,多个项目同时访问同一个dll时,即可避免再次加载了。因为,第二个项目 在访问时,寻找到的类,已经被systemLoader加载过了,因此项目本身的classLoader就不会再去加载这个类了。

 

 

标签:lang,supermap,java,dll,报错,loaded,iserver,加载
From: https://www.cnblogs.com/Fooo/p/17574177.html

相关文章

  • java 设置透明按钮
    要让按钮变透明,你可以使用JavaSwing中的JButton组件,并通过设置其透明度来实现。下面是一个简单的示例代码:importjavax.swing.*;importjava.awt.*;publicclassTransparentButtonExample{  publicstaticvoidmain(String[]args){    JFrameframe......
  • 强大的中文分词器--结巴分词(java版)
    简介原生jieba分词是强大的Python组件,可以用来进行关键词提取,标注以及定位。java版支持三种模式精确模式:试图将句子最精确地切开,适合文本分析;全模式:把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召......
  • java-base-three
    #在java中,对象的内存在哪个时刻回收,取决于垃圾回收器何时运行。一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正的回收对象占用的内存(《java编程思想》)在C++中,对象的内存在哪个时刻被回收,是可以确定的,在C++中......
  • java游戏服务器2023年7月22日
    name卡牌军团放置卡牌游戏开发语言:javamysql通信http账号服务器提供验证等功能中心服务器跨服功能排行榜公会......
  • Java多线程详解——一篇文章搞懂Java多线程
    Java多线程详解——一篇文章搞懂Java多线程目录1.基本概念2.线程的创建和启动2.1.多线程实现的原理2.2.多线程的创建,方式一:继承于Thread类2.3.多线程的创建,方式一:创建Thread匿名子类(也属于方法一)2.4.多线程的创建,方式二:实现Runnable接口2.4.1.比较创建线程的两种......
  • 316. 去除重复字母 (JAVA)
    给你一个字符串s,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例1:输入:s="bcabc"输出:"abc"示例2:输入:s="cbacdcbc"输出:"acdb" 提示:1<=s.length<=10^4解题思路:当前字母比前一个字母小,......
  • java学习笔记
    目录值传递&引用传递WeakHashMap-弱引用MapHashMapResponseEntityMessageFormat.format-代码里直接打印输出如何将java项目的依赖打成一个大的jar包加载证书报错:Couldnotparsecertificate:java.io.IOException:Incompletedatapowermock使用注意jpa的使用注意AOP切面java......
  • JavaScript继承
    继承—通过原型1.共同functionA(){}functionB(){}constg={a:1,b:2,};我想让从A、B构造出来的对象都具有g其中的属性,就可以通过继承A.prototype=gA.prototype.constructor=Aconsole.log(A.prototype)//{a:1,b:2,constructor:[Function:Man]}......
  • golang 实现 RPC(远程过程调⽤实例)
    golang实现RPC 前提概要,先了解几个概念,websocket简介什么是websocketWebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的Websocket是一个持久化的协议webs......
  • java内存分析工具使用
    目录参考链接1、名词解释2、常见异常java堆内存异常java栈内存异常方法区内存异常3、解决思路4、生成dump文件的三种方式jvisualvmjmap命令应用启动配置5、MemoryAnalyzer分析工具参考链接Java内存溢出OOM之dump分析1、名词解释内存泄露:代码中的某个对象本应该被虚拟机回收,......