使用classloader时的奇怪问题
我在用this.getClass().getClassLoader().loadClass("classname")动态加载一个类,起初没有问题,一切正常.不过第二天我把web-info中的那个类删掉了,为了试验其他功能,然后考回去以后就出错了,从新build工程也不起作用.一到这行就报一个 java.lang.NoClassDefFoundError:com/......
具郁闷... 哪个高人给点意见吧
问题点数:20、回复次数:9Top
1 楼woowo()回复于 2005-04-22 17:40:37 得分 0
结构是这样的,包A中有一个接口interface, 需要加载的类classA是implements这个接口的.当我load那个class就回出这个错, 刚才我试了试,不去load他,而是直接interface iface = new classA.也会出这个error.. 而且他报的NoClassDefFoundError后面也是说那个接口,而不是要加载的类.整一下午了,晕... 接口,被加载的类,加载他们的类,他们是放在三个不同的包中的.我快不行了...Top
2 楼woowo()回复于 2005-04-22 17:59:31 得分 0
疯了,我把用到那个接口的地方都去掉了,连那个接口的包都删了,能想到的classes都是从新build的,居然好报那个错,哭...还是在new那个原来实现那个接口的类的位置报,可是他现在已经 不是实现那个接口的了...Top
3 楼woowo()回复于 2005-04-22 18:07:21 得分 0
500 Servlet Exception
java.lang.NoClassDefFoundError: com/mywork/importinterface/UserInterface
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at com.caucho.util.DynamicClassLoader.loadClass(DynamicClassLoader.java:500)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at com.caucho.util.DynamicClassLoader.loadClass(DynamicClassLoader.java:500)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at com.caucho.util.DynamicClassLoader.loadClass(DynamicClassLoader.java:500)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at com.mywork.dataimport.ImportUser.<init>(ImportUser.java:17)
at com.mywork.dataimport.ImportPeer.importData(ImportPeer.java:19)
at _plugin_0operate__jsp._jspService(E:\works\mywork\plugin_operate.jsp:16)
at com.caucho.jsp.JavaPage.service(JavaPage.java:75)
at com.caucho.jsp.Page.subservice(Page.java:506)
at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:182)
at com.caucho.server.http.Invocation.service(Invocation.java:315)
at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:246)
at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:163)
at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
at java.lang.Thread.run(Thread.java:595)
--------------------------------------------------------------------------------
Resin 2.1.11 (built Mon Sep 8 09:36:19 PDT 2003)Top
4 楼ysbcg(Hummer)回复于 2005-04-22 18:22:47 得分 10
呵呵 重写类是要重启服务器的
你的所有class都要重新编译 生成
把生成的class拷贝到服务器
然后启动服务器Top
5 楼deadcode(树欲静,而风不止.)回复于 2005-04-22 19:43:49 得分 5
恩,对,应用程序服务器要重新启动~Top
6 楼superslash(开始用功学习)回复于 2005-04-22 20:10:31 得分 0
看看先Top
7 楼woowo()回复于 2005-04-25 09:12:27 得分 0
又开始上班了,不过还是没解决这个问题,看来要苦战了...可能不是程序的问题,也可能是jdk或者resin的问题吧,我把程序考到别的机器上就ok的.....Top
8 楼CAYU(中原)回复于 2005-04-25 09:15:54 得分 5
com/mywork/importinterface/UserInterface
UserInterface 是个接口吧! 接口是不能实例化的.必须是一个可以 new 创建的类Top
9 楼woowo()回复于 2005-04-26 18:31:43 得分 0
问题是解决了,不过很奇怪,我从新考了一个份resin,然后从新配置了一边就ok了,郁闷的问题Top




