我在使用类加载器按名称加载类时遇到了一些非常奇怪的问题。这个类是从类路径上的第三方jar中提取的。但是,尝试实例化该类失败,并在以下行中出现ClassNotFoundException:
String className = "...";
myInstance = Class.forName(className).newInstance();
我也试过三种不同的类加载器:
classLoader = this.getClass().getClassLoader(); // or
classLoader = Thread.currentThread().getContextClassLoader(); // or
classLoader = ClassLoader.getSystemClassLoader();
myInstance = (IPackageWriter)Class.forName(className, true, classLoader).newInstance();
但是,这些都不起作用。我检查了"类"属性,我确实看到了Jar中的一些类,但不是全部。我试图实例化的那个似乎不见了。
我之前从未遇到类似这样的事情。有谁知道为什么只有Jar中的类的子集可能在类加载器中可用?或者我如何进一步调试此问题的任何想法? 非常感谢。
干杯,
马丁
答案 0 :(得分:0)
如果没有看到正在加载的类和jar文件,很难说出你的问题是什么。不过,以下是您可能尝试解决问题的一些事项:
如果上一步成功调用
CodeSource src = MyClass.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println(src);
找出实际装载的jar。该类可能是从不同的jar中加载的。