繁体   English   中英

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

[英]Invoking ObjectInputStream.readObject(); method in java is throwing ClassNotFoundException when called from thread run();

我正在尝试在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中正常使用线程吗?

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


更新:

伙计,我已经解决了问题。 实际上,run()方法不是问题。 ObjectInputStream,readObject()给了我错误。 我只需要在服务器和客户端中都保留一个相同的程序包名称,当然还要对其进行序列化。 好了,现在解决了。 谢谢大家的帮助:)非常感谢!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM