jar中的ClassNotFoundException

时间:2013-07-12 20:12:27

标签: java classnotfoundexception

我的Java应用程序有问题。 有时,当我在Ubuntu服务器上运行我的应用程序时,会发生ClassNotFoundException。 我有时说过,因为错误是随机出现的:有时很长一段时间后(并重新启动应用程序修复了错误),有时在第一次使用相关类时(重建应用程序修复了错误)。

请注意,它并不总是导致错误的同一个类。 另请注意,我不使用Class.forName()或Classloader.loadClass()或ClassLoader.findSystemClass()。

我通过命令运行我的应用程序: java -jar server.jar

所有类都在Jar文件中(我解压缩它以检查)并且Manifest是正确的。

这是我得到的错误:

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(版本23.7-b01,混合模式)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

请注意,当您通过ObjectInputStream从字节数组反序列化对象时,您的应用程序必须依赖于对象的类,因为'ObjectInputStream.resolveClass'方法将调用java.lang.Class.forName0()以使该流成为一个对象

此处您的应用程序不依赖于名为“com.edioromeh.server.server2server.S2SDroppedItem”的类

您可以找到包含此类的.jar文件,并将其放入应用程序的类路径中。