调用ObjectInputStream.readObject(); java中的方法在从线程run()调用时抛出ClassNotFoundException;

时间:2014-03-03 19:49:30

标签: java multithreading tomcat

我正在尝试在tomcat中实现一个线程。基本上它是用于处理Java服务器套接字协议。该线程在tomcat应用程序之外工作正常,但是当我尝试调用另一个类时,使用此线程run()的方法让我java.lang.ClassNotFoundException: com.app.util.Data 以下是错误的完整版本:

java.lang.ClassNotFoundException:  com.app.util.Data
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:622)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1593)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
    at com.app.util.pack.ServerClientHandler.run(ServerClientHandler.java:52)

类文件(com.app.util.Data)正确放置在指定路径中并导入com.app.util.pack.ServerClientHandler。我知道有很多关于ClassNotFoundException错误的问题,但在我的情况下,文件被正确放置在路径中,并且编译器或IDE完全没有错误。是否有任何特定原因可以通过tomcat服务器中的线程run()方法为可用的类文件抛出ClassNotFoundException,是否有任何替代方法可以使用在tomcat中正常工作的线程?

我知道这完全是一个没有任何线索的noob问题,但我没有在网上找到任何答案。 再次感谢!


更新

盖伊,我已经解决了这个问题。实际上它不是run()方法的问题。 ObjectInputStream,readObject()给了我错误。我只需要在服务器和客户端保持相同的包名称,当然还要将其序列化。那现在已经解决了。谢谢大家的帮助:)非常感谢!

1 个答案:

答案 0 :(得分:0)

请记住,您无法从服务器类加载器加载的类中调用应用程序类加载器加载的类。

你可以在这里阅读一个很好的解释:

http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html