没做过,但感觉要么在环境变量中改,要么在jdk的调用包里看有没有什么文件可以该,程序中应该不能实现,我认为后者的可能比较大。
关注,看有没有人做过

解决方案 »

  1.   

    java -Djava.system.class.loader=YourLoaderName MyClass试试
      

  2.   

    java -Djava.system.class.loader=YourLoaderName MyClass
    上面方法,我试过好像不成功。
    请ChDw(米)再讲清点好吗?
      

  3.   

    package chdw;import java.io.DataInputStream;
    import java.io.FileInputStream;public class MyClassLoader extends ClassLoader { public MyClassLoader(ClassLoader cl) {
    super(cl);
    }

    public Class loadClass(String name) throws ClassNotFoundException {
    System.out.println("Load:" + name);
    if(name.startsWith("chdw")) {
    try {
    //Load 指定目录下面的Class文件
    FileInputStream fis = new FileInputStream(name.replace('.','/') + ".class");
    byte[] buf = new byte[fis.available()];
    DataInputStream dis = new DataInputStream(fis);
    dis.readFully(buf); 
    dis.close();
    return super.defineClass(name,buf,0,buf.length,null);
    } catch (Exception e) {
    System.err.println("Exception:" + e.getMessage());
    throw new ClassNotFoundException(name);
    }
    } else
    return super.loadClass(name);
    }
    }//----------------------------------
    package chdw;
    public class Test { public static void main(String[] args) throws Exception{
    System.out.println(Class.forName("chdw.Abc"));
    }
    }
    //----------------------------
    java -cp . -Djava.system.class.loader=chdw.MyClassLoader chdw.Test这样你的ClassLoader就可以加载你需要的类了,如果你不需要加载就调用父类的方法
      

  4.   


    import java.io.*;
    import java.net.MalformedURLException;
    import java.security.*;class MyClassLoader extends ClassLoader 
    {
    private ClassLoader m_parent;
    private ProtectionDomain pd; public MyClassLoader(ClassLoader parent, String basePath)
    {
    m_parent = parent;
    try
    {
    CodeSource codeSource = new CodeSource( (new File(basePath)).toURL(), null);
    Permissions permissions = new Permissions(); permissions.add(new AllPermission());
    pd = new ProtectionDomain(codeSource, permissions);
    }
    catch (MalformedURLException ex)
    {
    ex.printStackTrace();
    return;
    }
    } public synchronized Class loadClass(String className,
    boolean resolveIt) throws ClassNotFoundException
    { Class result;
    byte classData[]; // Check the loaded class cache
    result = findLoadedClass(className);
    if (result != null) {
    // Return a cached class
    return result;
    } String fileName = className.replace('.', File.separatorChar) + ".class";
    classData = JDownload.getFileBytes(fileName);
    if (classData == null)
    {
    try
    {
    result = m_parent.loadClass(className);
    return result;
    }
    catch (Exception e)
    {
    System.out.println("Class load failed:"+fileName);
    }
    }
    result = defineClass(className, classData, 0, classData.length, pd);        if (result == null) {
    System.out.println("Class format error: " + className);
    throw new ClassFormatError();
    }        if (resolveIt) {
    resolveClass(result);
    }
    return result;
    }    public InputStream getResourceAsStream(String name) 
        {
    System.out.println("getResource, name:"+name);
    byte[] classData = JDownload.getFileBytes(name);
         return classData != null ? new ByteArrayInputStream(classData) : null;
        }
    }
      

  5.   

    ChDw(米),按你的说法好像还达不到虚拟机JVM(通过此设置后)自动调用自定义loadclass(该类的实现过程我早已撑握)类(而不是JVM的ClassLoader类)。
      

  6.   

    我说的让虚拟机JVM(通过此设置后)自动调用自定义loadclass类装载其它java类的
    示意图如下:
      1、JVM虚拟机<<----JVM类装载器<<----用户java 程序类
    通过设置(当然是要编程设置实现,我希望的也是给出该程序的实例)达到如下:
      2、JVM虚拟机<<----<<JVM类装载器<<----用户自定义的类装载器<<----用户java 程序类
                <<----用户自定义的类装载器<<----用户java 程序类
    意思为:用户自定义的类装载器如能正常完成类装载工作,当其装载完成后就交给JVM处理,否则就将其类装载工作交给JVM类装载器,处理完成再由其交给JVM
      

  7.   

    我的类的运行情况是这样的:
    Load:java.lang.String
    Load:chdw.Test
    Load:java.lang.Object
    Load:java.lang.Exception
    Load:java.lang.System
    Load:java.lang.Class
    Load:chdw.Abc这样已经说明我已经使用MyClassLoader来加载我所有的类了,这个还不能满足你的需要吗?
    你需要的是怎样的效果?
      

  8.   

    我的ClassLoader在一般的情况下面就使用默认的方法来加载相应的类,因为像String,System这些我们不应该理会它的加载过程的判断如果是我自己的类,则我企图去读取出相应的.class文件(其实还可以从网络中获得的)的所有字节码,然后使用定义defineClass(name,buf,0,buf.length,null);来完成定义这个类的过程
      

  9.   

    ChDw(米),多谢你的支持,我的意思是这样,象你说的介绍写一个类装载器,我希能通过该类装载器自动装载我的java 类,命令提示符可行,基于Web的也可行(既通过B/S访问我布暑的工程时,后台工作的装载器是我们自己写的),请再帮帮忙????