各位大神 求解一个问题 我自己写了个类加载器想来加载类我的类加载器是
package com.djk.classloader;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;import javax.imageio.stream.FileImageInputStream;/**
 * 自定义类加载器
 * @author djk
 *
 */
public class FileSystemClassLoader extends ClassLoader
{
/**
 * 类加载器加载class文件的目录
 */
private String rootPath;

public FileSystemClassLoader(String rootPath)
{
this.rootPath = rootPath;
}

/**
 * 自己定义一个类加载器主要是重写findclass方法
 */
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException
{
byte [] classByte = getBytes(name);
if(null == classByte)
{
throw new ClassNotFoundException();
}else
{
return defineClass(name, classByte, 0,classByte.length);
}
}

private byte [] getBytes (String className)
{
String path = classNameToPath(className);
try 
{
InputStream is = new FileInputStream(new File(path));
ByteArrayOutputStream bas = new ByteArrayOutputStream();
int length = 0;
byte [] buffer = new byte[4028];
while((length =is.read(buffer))!=-1)
{
bas.write(buffer, 0, length);
}
return bas.toByteArray();
} catch (Exception e)
{
}
return null;
}

/**
 * 把文件的名称写完
 * @param className
 * @return
 */
private String classNameToPath(String className)
{
return this.rootPath+"/"+className.replace(".", "/")+".class";
}
}然后我在F盘目录下放了Test1.class文件 然后利用这个自定义类加载器来加载这个Test1.class文件 FileSystemClassLoader fileSystemClassLoader = new FileSystemClassLoader("F:");
fileSystemClassLoader.loadClass("Test1").newInstance();
发现报错  Exception in thread "main" java.lang.NoClassDefFoundError: Test1 (wrong name: com/djk/类加载器/Test1) 想请教下为什么会报这个错
我自己也考虑过 是不是由于是用了appclassLoder去加载了啊?用appclassloader去加载的话确实加载不到 不过我是用自己定义的类加载器去加载这个class文件为什么会报这个错啊?求大神、

解决方案 »

  1.   

    想先问下发现报错  Exception in thread "main" java.lang.NoClassDefFoundError: Test1 (wrong name: com/djk/类加载器/Test1) 包路径中还带中文的? 与给出的类FileSystemClassLoader的包路径com.djk.classloader形成了鲜明的对比
      

  2.   


    "F:/Test1.class" ?
    "F:/com/djk/类加载器/Test1.class" ?