0

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

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

我通过以下命令运行我的应用程序:java -jar 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 version "1.7.0_15" OpenJDK Runtime Environment (IcedTea7 2.3.7) (7u15-2.3.7-0ubuntu1~12.04.1) OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

谢谢你的帮助!

4

1 回答 1

1

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

在这里,您的应用程序不依赖于名为“com.edioromeh.server.server2server.S2SDroppedItem”的类

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

于 2013-07-13T04:12:44.590 回答