tomcat中C++线程调用java出现ClassDefNotFound
来源:互联网 发布:智慧树网络课答案2017 编辑:程序博客网 时间:2024/06/05 06:13
遇到一个场景是web项目中需要使用C++的库,正常写法,调用C++的函数什么的都没有问题,但是C++中的线程回调中调用java的类在使用FindClass时出现ClassDefNotFound
的错误,但是脱离tomcat测试就是ok了,那一定是classpath中没有对应路径了,但是tomcat中用java直接访问啥问题都没啊,怀疑tomcat启动脚本并没有设置对应的classpath,而tomcat使用了自己的classloader。在tomcat启动脚本中catalina.sh尝试加上classpath=class的绝对路径,问题果然解决了,但是这个办法感觉不够灵活,需要对应项目classes的路径,随后在程序启动中动态的加上应用classpath,测试ok,以下是代码部分
//反射的方式将当前应用的classes路径加到系统的classloader里面去if (Test.class.getClassLoader() instanceof ParallelWebappClassLoader&& Test.class.getClassLoader().getParent() instanceof URLClassLoader&& ClassLoader.getSystemClassLoader() instanceof URLClassLoader){try {Method func = URLClassLoader.class.getDeclaredMethod("addURL", (new Class[]{URL.class}));func.setAccessible(true);URL addPath = new URL(Test.class.getResource("/").toString());func.invoke(ClassLoader.getSystemClassLoader(),new Object[]{addPath});} catch (NoSuchMethodException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (SecurityException e) {// TODO 自动生成的 catch 块e.printStackTrace();}catch (IllegalAccessException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (IllegalArgumentException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (InvocationTargetException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (MalformedURLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}
补充:上面的方法一个严重的问题就是两个classloader加载的同一个class在jvm中并不是相同的,导致jvm中存在两个Test对象,继续想办法ing
阅读全文
0 0
- tomcat中C++线程调用java出现ClassDefNotFound
- tomcat 运行classNotFound和classDefNotFound问题解决
- Android NDK: 子线程中C调用Java
- Android NDK: 子线程中C调用Java
- android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题
- tomcat调用axis服务时出现 java.lang.InvocationException解决方案
- 子线程中调用UpdateData(TRUE/FALSE)出现异常解决方法
- java调用python脚本之tomcat中
- Java中调用C库函数
- Java线程 构造函数在那个线程中调用
- PJSIP在线程中调用出现提示注册线程pj_thread_register的解决方案
- 在线程中调用PJSIP中的呼叫出现提示注册线程pj_thread_register的解决方法
- Java工作笔记:在jetty插件下调用C接口透传数据库正常但在Tomcat下中文出现乱码现象
- mysql C api 中调用出现1312问题
- C++中调用C代码,出现“Undefined Reference…”
- jni c调用java 方法封装后出现的问题
- JAVA 线程出现异常
- Java 线程使用中出现的异常IllegalMonitorStateException
- listview条目未满全屏时,button在listviwe下方,条目超过屏幕时,button在屏幕底端
- CMake/Tutorials/Exporting and Importing Targets
- IDEA中Spring Boot项目MyBaits提示Invalid bound statement (not found)错误
- 1.JAVA 基本算法:冒泡排序法--详讲
- System.out.println当输出一个属性的时候是会读相关属性的真实内存地址上的数据同时做一次同步
- tomcat中C++线程调用java出现ClassDefNotFound
- Appache下 创建SVN账号(针对具体项目)
- 实现 “再按一次退出” 功能
- JavaScript 多选框多选与取消多选两种写法
- CCF CSP 有趣的数
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- 分布式监控解决方案zabbix03-监控mysql
- 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
- 强烈推荐的机器学习,深度学习课程以及python库