我的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,混合模式)
感谢您的帮助!
答案 0 :(得分:1)
请注意,当您通过ObjectInputStream从字节数组反序列化对象时,您的应用程序必须依赖于对象的类,因为'ObjectInputStream.resolveClass'方法将调用java.lang.Class.forName0()以使该流成为一个对象
此处您的应用程序不依赖于名为“com.edioromeh.server.server2server.S2SDroppedItem”的类
您可以找到包含此类的.jar文件,并将其放入应用程序的类路径中。