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バージョン「1.7.0_15」OpenJDKランタイム環境(IcedTea7 2.3.7)(7u15-2.3.7-0ubuntu1〜12.04.1)OpenJDK 64ビットサーバーVM(ビルド23.7-b01、混合モード)

ご協力いただきありがとうございます!

4

1 に答える 1

1

バイト配列から ObjectInputStream によってオブジェクトをデシリアライズする場合、'ObjectInputStream.resolveClass' メソッドは java.lang.Class.forName0() を呼び出してストリームをオブジェクトにするため、アプリケーションはオブジェクトのクラスに依存している必要があることに注意してください。

ここで、アプリケーションは「com.edioromeh.server.server2server.S2SDroppedItem」という名前のクラスに依存していませんでした

このクラスを含む .jar ファイルを見つけて、アプリケーションのクラスパスに入れることができます。

于 2013-07-13T04:12:44.590 に答える