at com.testnewface.main(testnewface.java:58)是return defineClass(classname,classbyte,0,readsize);这句吗?

解决方案 »

  1.   

    是这一句 我怀疑是不是classname 的这个class找不到!!。。
    给点指点吧
      

  2.   

    //testnewface.javapackage com;
    //使用的主程序
    public class testnewface {
        public static void main(String[] args) throws java.lang.Exception
         {
    //  共用初使化参数,开始
        Class testc;
        Object testo;
        cloader cl=new cloader();
    //  共用初使化参数,结束//方法 1 的例子代码,newface是本地接口类,newface.class本地已经存在 开始
        testc=cl.load("testfacea.file","testfacea");
        testo=testc.newInstance();
         System.out.println("Instance has over!");
        ((newface)testo).out("方法1 第(1)种使用方法");
         System.out.println("outsize="+((newface)testo).outsize("1111","aaaa"));    testc=cl.load("testfacea.fisle","testfacea");
        testo=testc.newInstance();
        newface newface1=(newface)testo;
        newface1.out("方法1 第(2)种使用方法");
        System.out.println("outsize="+newface1.outsize("22222","bbbbb"));
    //方法 1 的例子代码,结束     }
    }//newface.java 接口
    package com;public interface newface {       public void out(String xx);
           public int outsize(String x1,String x2); }
    //testfacea.java 实现上接口
    package com;
    /*
    newface的实现
    */
    public class testfacea implements newface{    public void out(String xx)  {
        System.out.println(xx+" for testfacea ");
        }
        public int outsize(String x1,String x2)  {
          return x1.length()+x2.length();
        }}
    //cloader.javapackage com;/*
    要想自己完成从一个 byte[] 转换到一个Class 必须要 extends ClassLoader
    因为ClassLoader中的方法defineClass是 protected  要使用只有 extends ClassLoader
    */
    import com.newface;
    class cloader extends ClassLoader  {
         static int maxsize=10000;
          public Class load(String namefile,String classname) throws java.lang.Exception
           {        try {
               //进行判断这个class是否已经调入,已经有就直接返回,不然就调入
               Class ctmp=this.findLoadedClass(classname);
               System.out.println(ctmp.getName()+" is load");
               return ctmp;
               }
               catch (Exception e)  {
               //System.out.println(e);
                 }
            java.io.FileInputStream in=new java.io.FileInputStream("d://"+namefile);
            byte[] classbyte=new byte[maxsize];
    //实际应用时完全可以对一个文件进行加解密处理,只要保证使用defineClass时classbyte中
    //已经解密后的内容就可以
            int readsize;
            readsize=in.read(classbyte);
            System.out.println("读文件长:"+readsize);
            in.close();
            System.out.println("the classname:"+classname);
            return defineClass(classname,classbyte,0,readsize);
                  }
    }