【发布时间】:2015-07-12 04:41:32
【问题描述】:
我正在使用 URLClassLoader 创建一个新的类加载器,并尝试将其设置为当前线程的类加载器。 但它不适合我。 根据我的理解,如果我给当前线程设置了一个classLoader,那么当前线程引用的方法和接口应该来自当前的classLoader。 但我的情况并非如此。该方法是从另一个 jar 中提取的,我得到了 classCastExecption。 下面是获取classLoader的代码:
public ClassLoader getClassLoader(boolean b) {
ClassLoader loader = null;
File file = new File(SamVariables.JAR_FILE);
if (file.exists()){
try {
List<URL> urlsList = new ArrayList<URL>();
urlsList.add(file.toURI().toURL());
URL[] urls = new URL[urlsList.size()];
urlsList.toArray(urls);
URLClassLoader url = new URLClassLoader(urls);
try {
loader = Class.forName("org.jboss.naming.remote.client.InitialContextFactory", false, url).getClassLoader();
} catch (ClassNotFoundException e) {
loader = Class.forName("org.jboss.jms.client.JBossConnectionFactory", false, url).getClassLoader();
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
return loader; // I am successfully getting the classLoader for the class
}
I set it to the current thread
Thread.currentThread().setContextClassLoader(getClassLoader);
But later when I try to get the topicConnectionFactory object, it gives me typecast exception:
topicConnectionFactory = (TopicConnectionFactory) topicConnectionFactObj;
它给了我 classCastException。
当我检查 TopicConnectionFactory 对象时,它来自另一个导致问题的 jar 文件。
【问题讨论】:
标签: java jar jboss casting classloader