Java URLClassLOader无法从jar动态加载类

Java URLClassLOader无法从jar动态加载类,java,urlclassloader,dynamic-class-loaders,Java,Urlclassloader,Dynamic Class Loaders,我在loadClass中得到ClassNotFoundException 我已经尝试了代码的几种变体,例如 URLClassLoader child; try { child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, Test2.class.getClassLoader()); child.loadClass("com.bla.bla.StringUtilService"); } c

我在
loadClass
中得到
ClassNotFoundException

我已经尝试了代码的几种变体,例如

   URLClassLoader child;
   try {
       child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, Test2.class.getClassLoader());
       child.loadClass("com.bla.bla.StringUtilService");
   } catch (MalformedURLException | ClassNotFoundException ex) {
       ex.printStackTrace();
   }
但是所有的结果都进入
ClassNotFoundException


我曾尝试在Eclipse中调试,但类装入器实例无法从jar中装入类。类向量为空。

该类是url中dir的直接子类,因此不需要包

在不带软件包的情况下尝试此操作。像这样:

URL[] urls = { new URL("jar:file:" + "E:\\Works\\Workspace\\JUnit_Proj\\client.jar"+"!/") };
URLClassLoader cl = URLClassLoader.newInstance(urls);
URLClassLoader child;
try {
    child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, Test2.class.getClassLoader());
    child.loadClass("StringUtilService");
} catch (MalformedURLException | ClassNotFoundException ex) {
    ex.printStackTrace();
}
另外,请这样尝试:

URL[] urls = { new URL("jar:file:" + "E:\\Works\\Workspace\\JUnit_Proj\\client.jar"+"!/") };
URLClassLoader cl = URLClassLoader.newInstance(urls);
URLClassLoader child;
try {
    child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, Test2.class.getClassLoader());
    child.loadClass("StringUtilService");
} catch (MalformedURLException | ClassNotFoundException ex) {
    ex.printStackTrace();
}

解决方案来自:

使用URLClassLoader的不同构造函数成功

URLClassLoader child;
try {
    child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, getClass().class.getClassLoader());
    child.loadClass("StringUtilService");
} catch (MalformedURLException | ClassNotFoundException ex) {
    ex.printStackTrace();
}

myJar的类型是什么?@Henry:java.io.File。也尝试使用JarFile。是否有人已成功地从JAR动态加载类?请阅读以下内容: