晕,少写了几个字:在自己指定的路径下有很多jar包,jar包中有很多子文件夹和各种.class文件及资源文件,我要用到其中定义的一个类,所以要加载这个类,请问怎么完成这样的功能?最主要的意思就是指定路径下的jar文件中的类怎么加载?

解决方案 »

  1.   

    1.直接加到classpath就可能了。
    2.如果使用JBuilder/eclipse之类的编程工具比较简单了。.....
    然后在自己的java文件中import就可以了。
      

  2.   

    我需要一个这样的功能:在我的应用程序中,已经指定,或者说动态指定一个目录,我的程序需要不断的扫描这个路径,从而不断地将该路径下随时新加入的类(应用程序还在运行中)加载到虚拟机中,从而可以不断地用到新加入的类中的方法,至于加载该目录下.class文件的功能我已经完成,只是在加载jar文件下的类时出了问题,请问有用类加载器动态加载jar包经验的高手,如何实现?
      

  3.   

    难度主要在于指定路径下加载jar包中的类跟直接加载.class是完全不同的两种实现方法,我开始是这样实现的:先重写findclass 及 loadClassBytes 函数,直接读出jar包中的.class条目(ZipEntry),然后将该ZipEntry下的二进制流组装成类然后通过loadClassBytes 函数装载进classloader。可是有个问题是,当我需要的类中有内隐类时或者说引用到其他的类时这样的方法就行不通了,因为虚拟机会用你重写的方法去加载其他类,所以我很郁闷,怎样才能把这样的问题解决啊?
      

  4.   

    我猜 你重写的findClass方法没有先调用super的此方法.
     你试试在以下代码
      public Class findClass(String className)
      {
         Class clazz = super.findClass(className);
         if(clazz!=null) return clazz;
          ...//自己的查找实现
       } 我还写了一个jar浏览器, 可以像资源管理器一样查看jar下的包,类,以及类的成员. 如果感兴趣可以和我交流. [email protected]
      

  5.   

    Tomcat容器不是具有这样的功能?
    你看看它的源代码看找得到答案否?
      

  6.   

    需要自己写一个 ClassLoader,可能会有些麻烦。
    去 google 查查资料吧。
      

  7.   

    henryqqq(亨利):
        多谢提醒啊,findClass函数我重写过也是用过super.findClass(className)这个方法的,可是还是不行,不过还是很感激你能提供这样的信息,源代码我已经给你发过去了,第一次是以前的,第二次发的是改动后的源代码,希望能共同研究哈
      

  8.   

    Tomcat的源码我也看了,之前看是没有什么头绪,因为觉得Tomcat实现的功能是多,但是主要的加载类功能都差不多,不过在liu_han() 的建议下又看了一遍,感觉再看又有些收获,因为又得到一个思路那就是写一个解包的函数把jar包解到目录下再将该路径给到以前写好的classloader用来解决这个问题,虽然有点繁杂但也是一个解决的办法
      

  9.   

    1.直接加到classpath就可能了。
    2.如果使用JBuilder/eclipse之类的编程工具比较简单了。
      

  10.   

    我倒,你那是静态加载类,我需要的是动态加载,如果我不停的从网上获取新的类,得到新的方法和属性,你不是要不停的重起,并且不停的改ClassPath了?
      

  11.   

    OK, 解包后再加在类文件的方式我做到了,问题也解决了,但是每当加载类的时候会有个问题就是报java.lang.NoClassDefFoundError: AbstractButtonBeanInfo (wrong name: javax/swing/AbstractButtonBeanInfo)这个错误,难道jar包中的class文件是这样命名的?
      

  12.   

    这种初级问题,高手能来么!【开 Eclipse 版的999个理由 & 需要理由吗?】
    http://community.csdn.net/Expert/topic/3472/3472604.xml
      

  13.   

    我晕,你那贴得什么东西啊,虽然我也用Eclipse ,而且你那个话题也不错,但跟我的问题有什么关联呢?你所谓简单,我怎么没看到你的解释那?高手是那种有着宽广心胸的人,而不是自以为了不起随处贬人的半罐子啊!