为什么forname加载类报错?

来源:百度知道 编辑:UC知道 时间:2024/05/18 06:37:23
程序如下:
System.out.println(this.getClass());
File Uclass = new File("UpdateFile.class");
if(Uclass.exists()){
System.out.println(Uclass.getAbsoluteFile());
}else{
System.out.println("not exists.");
}
File download = new File("UpdateFile.class");
System.out.println("exists:" + download.exists());
System.out.println("isFile:" + download.isFile());
ClassLoader cl = this.getClass().getClassLoader();
cl.loadClass("UpdateFile").newInstance();

运行输出如下:
class businesscardmanger.runbcm.Update
D:\Temp\tempjava\RunBCM\UpdateFile.class
exists:true
isFile:true
严重: null
java.lang.ClassNotFoundException: UpdateFile

说明:
UpdateFile.class是经过编译的 里面都是public的
而且有 public updateFile()的构造方法
D:\Temp\tempjava\RunBCM\UpdateFile.class
exists:true
isFile:true
已经说明文件在当前目录下 并且是文件。
请大虾

cl.loadClass("UpdateFile").newInstance();

这句话有问题。

loadClass()方法中的参数是string格式的类的名字。

比如你有个类叫ABC,那么可以使用loadClass("ABC")来生成ABC的类的实例。

在这里,很明显,错误信息告诉你,没有一个叫做UpdateFile的类。你在问中说在本地目录下有这个类。和这个是没有关系的。

我认为原因就是你的工程中根本没有UpdateFile这个类。

或者你应该把D:\Temp\tempjava\RunBCM\UpdateFile.class

作为类路径引用到你的项目中去。试下吧。