2013-07-12 78 views
0

我有一個Java應用程序的問題。 有時,當我在Ubuntu服務器上運行我的應用程序時,會發生ClassNotFoundException。 我之所以說有時是因爲錯誤是隨機出現的:有時在很長一段時間後(重新啓動應用程序會修復錯誤),有時在第一次使用相關類時(並重建應用程序可修復錯誤)。jar中的ClassNotFoundException

請注意,它並不總是導致錯誤的類。 另請注意,我不使用Class.forName()或Classloader.loadClass()或ClassLoader.findSystemClass()。

我通過命令來運行我的應用程序: Java的罐子的server.jar

所有的類都在JAR文件(我解壓它來檢查)和清單是正確的。

這是錯誤我得到:

java.lang.ClassNotFoundException: com.edioromeh.server.server2server.S2SDroppedItem at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:266) 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.edioromeh.ub.server.Messenger.run(Messenger.java:44) at java.lang.Thread.run(Thread.java:722)

我的Java版本是: Java版本 「1.7.0_15」 OpenJDK的 運行時環境(IcedTea7 2.3.7)(7u15-2.3.7- 0ubuntu1〜12.04.1) OpenJDK 64位服務器VM(build 23.7-b01,混合模式)

感謝您的幫助!

+1

com.edioromeh.ub.server包中的'Messenger'類在嘗試反序列化對象時正在執行'class.forName()'。這看起來有點像RMI在通過網絡傳遞對象時的工作方式。有沒有一個服務器,你的連接這個密切? –

回答

1

請注意,當您通過ObjectInputStream從字節數組中反序列化一個對象時,您的應用程序必須依賴於對象的類,因爲'ObjectInputStream.resolveClass'方法會調用java.lang.Class.forName0()使流成爲一個東西。

這裏你的應用程序不依賴於一個名爲類「com.edioromeh.server.server2server.S2SDroppedItem」

你可以找到它包含這個類的.jar文件,並把它放進你的應用程序的類路徑。

相關問題