2014-03-03 64 views
0

我想在tomcat中實現一個線程。基本上它是用於處理Java服務器套接字協議。線程工作正常外Tomcat應用程序,但是當我嘗試調用另一個類,它是用這個線程運行方法()它給了我java.lang.ClassNotFoundException: com.app.util.Data 下面是完整版的錯誤:調用ObjectInputStream.readObject(); java中的方法在從線程run()調用時引發ClassNotFoundException;

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()給我錯誤。我只需要在服務器和客戶端保持一個相同的包名,並且當然要序列化它。那麼現在就解決了。謝謝大家的幫助:)非常感謝!

+0

哪裏是'com.app.util.Data'打包的應用程序內的編譯'.class'文件? –

+0

在開發和編譯過程中正確設置類路徑並不能保證它在服務器中正確設置。確保您的Data.class文件是Tomcat預期的位置,並且/或者您的所有類都位於Tomcat預期的jar文件中。 – keshlam

+0

@JustinJasmann是的,在com.app.util.Data本身編譯的.class文件。 – Ganesh

回答

0

請記住,您不能從由服務器類加載器加載的類調用由應用程序類加載器加載的類。

你可以在這裏閱讀一個很好的解釋:

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

+0

哎呀..以及我是一個java新手,我很抱歉,我沒有得到你。有沒有解決這個問題的方法? :)謝謝 – Ganesh

+0

傢伙,我已經解決了這個問題。實際上它不是run()方法的問題。 ObjectInputStream,readObject()給我錯誤。我只需要在服務器和客戶端保持一個相同的包名,並且當然要序列化它。那麼現在就解決了。謝謝大家的幫助:)非常感謝! – Ganesh

相關問題