我正在尝试使用Class.forName()
加载类,但它给了我异常java.lang.ClassNotFoundException: Test
。找不到动态加载类
实际上Test
是在eclipse工作目录here is the image中创建的,但它创建在bin文件夹之外。 如果我尝试运行使用命令提示符它正常工作。
下面的代码:
public class CompileString {
public static void main(String arges[]) throws Exception{
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
String program = " class Test{" + " public static void main (String [] args){"
+ " System.out.println (\"Hello, World\");"
+ " System.out.println (args.length);" + " }" + "}"
+"interface demo{}"
;
Iterable<? extends JavaFileObject> fileObjects;
fileObjects = getJavaSourceFromString(program);
Boolean result=compiler.getTask(null, null, null, null, null, fileObjects).call();
System.out.println(result);
Class<?> clazz=null;
try {
clazz = Class.forName("Test");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println(clazz);
e.printStackTrace();
}
Method m = clazz.getMethod("main", new Class[] { String[].class });
Object[] _args = new Object[] { new String[0] };
m.invoke(null, _args);
}
static Iterable<JavaSourceFromString> getJavaSourceFromString(String code) {
final JavaSourceFromString jsfs;
jsfs = new JavaSourceFromString("demo", code);
return new Iterable<JavaSourceFromString>() {
public Iterator<JavaSourceFromString> iterator() {
return new Iterator<JavaSourceFromString>() {
boolean isNext = true;
public boolean hasNext() {
return isNext;
}
public JavaSourceFromString next() {
if (!isNext)
throw new NoSuchElementException();
isNext = false;
return jsfs;
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
};
}
}
另一类:
class JavaSourceFromString extends SimpleJavaFileObject {
final String code;
JavaSourceFromString(String name, String code) {
super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE);
this.code = code;
}
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return code;
}
}
它给了我运行时异常
抛出java.lang.ClassNotFoundException:测试
一切工作正常编译器JavaCompiler compiler=ToolProvider.getSystemJavaCompiler()
给出true
但为什么我无法找到Test.class
。
类测试是不是在你的classpath – Jens
延..thanx您的回复yest它不是类路径,但我可以解决这个问题 –
如果我尝试运行使用命令提示符它工作正常 –