Blu*_*lub 2 java-native-interface
我从c ++启动线程并调用Java.JVM本身正确设置了类路径,并将所有必需的jar传递给-Djava.class.path.
为什么"上下文类加载器"在新线程中永远为空?
我有这个szenario:
ClassLoader cl = Thread.currentThread().getContextClassLoader(); // null on new threads
ClassLoader currCl = MyClass.class.getClassLoader();
ClassLoader jbossCl = org.jboss.remoting.InvocationResponse.class.getClassLoader();
Run Code Online (Sandbox Code Playgroud)
在第一个线程(在Eclipse中它表示"main")中,所有三个对象都是有效的并包含类.在以下所有线程中都cl为null.
对我没有任何意义,如果我将类加载到JVM中,它们应该全局可用于每个线程,不应该吗?由于某些原因,currCl和jbossCl中的类数量也大不相同.首先有~600而另一个有> 1000
我们遇到了同样的问题,令人费解.第一个线程可以加载类,但是连接到JVM的本机线程不能.您的问题具有与以下相同的解决方案: 服务加载程序找不到服务提供者类,即使类与META-INF/services在同一JAR文件中, 主持人可能希望将其标记为重复,但问题是非常不同的.
从此文档http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/invocation.html
"当一个线程附加到VM时,上下文类加载器就是引导加载器."
通过AttachCurrentThread()连接到JVM的任何本机线程只获取引导类加载器,甚至不获取系统类加载器.除非您明确修复新线程的上下文类加载器,否则无法从新线程加载类.
这可以这样做:
java.lang.Thread.currentThread().setContextClassLoader(
java.lang.ClassLoader.getSystemClassLoader()
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |