package dync;public class InDyncJar
{
public InDyncJar()
{
System.out.println("Dync load ok...");
}
}把这个类编译,打成一个jar包,然后删掉这个文件编译好的class动态调入如下,我觉得在当前的ClassLoader中调入是不可能的了,只能退而求其次了
package test;import java.net.URLClassLoader;
import java.net.URL;
import dync.InDyncJar;public class DyncLoadJar
{
static public void main(String[] args)
{
try
{
System.out.println("ok");
Object objRef = null;
System.out.println("before load jar");
try
{
Class clazz = Class.forName("dync.InDyncJar");
objRef = clazz.newInstance();
}
catch(Exception e)
{
e.printStackTrace();
}
// 把下面的改成你打好的jar文件的地址,注意要写成url形式的
URL url = new URL("file:///d:/src/DyncLoad.jar");
URL[] urls = new URL[]{ url };
ClassLoader loader = new URLClassLoader( urls, DyncLoadJar.class.getClassLoader() );
System.out.println("after load jar");
try
{
Class clazz = loader.loadClass("dync.InDyncJar");
objRef = clazz.newInstance();
}
catch(Exception e)
{
e.printStackTrace();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}把这个类编译,然后运行,命令行命令从头到尾是
javac -d . InDyncJar.java
jar cvf DyncLoad.jar dync
del dync\InDyncJar.class
javac -d . -classpath %CLASSPATH%;DyncLoader.jar DyncLoadJar.java
java -classpath . test.DyncLoadJar
输出如下
ok
before load jar
java.lang.ClassNotFoundException: dync.InDyncJar
at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:130)
at test.DyncLoadJar.main(DyncLoadJar.java:18)
after load jar
Dync load ok...
{
public InDyncJar()
{
System.out.println("Dync load ok...");
}
}把这个类编译,打成一个jar包,然后删掉这个文件编译好的class动态调入如下,我觉得在当前的ClassLoader中调入是不可能的了,只能退而求其次了
package test;import java.net.URLClassLoader;
import java.net.URL;
import dync.InDyncJar;public class DyncLoadJar
{
static public void main(String[] args)
{
try
{
System.out.println("ok");
Object objRef = null;
System.out.println("before load jar");
try
{
Class clazz = Class.forName("dync.InDyncJar");
objRef = clazz.newInstance();
}
catch(Exception e)
{
e.printStackTrace();
}
// 把下面的改成你打好的jar文件的地址,注意要写成url形式的
URL url = new URL("file:///d:/src/DyncLoad.jar");
URL[] urls = new URL[]{ url };
ClassLoader loader = new URLClassLoader( urls, DyncLoadJar.class.getClassLoader() );
System.out.println("after load jar");
try
{
Class clazz = loader.loadClass("dync.InDyncJar");
objRef = clazz.newInstance();
}
catch(Exception e)
{
e.printStackTrace();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}把这个类编译,然后运行,命令行命令从头到尾是
javac -d . InDyncJar.java
jar cvf DyncLoad.jar dync
del dync\InDyncJar.class
javac -d . -classpath %CLASSPATH%;DyncLoader.jar DyncLoadJar.java
java -classpath . test.DyncLoadJar
输出如下
ok
before load jar
java.lang.ClassNotFoundException: dync.InDyncJar
at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:130)
at test.DyncLoadJar.main(DyncLoadJar.java:18)
after load jar
Dync load ok...
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货