2013-07-12 4 views
0

Java 응용 프로그램에 문제가 있습니다. 때로는 우분투 서버에서 응용 프로그램을 실행할 때 ClassNotFoundException이 발생합니다. 때로는 오류가 무작위로 표시되기 때문에 때로는 : 때로는 오랜 시간 후에 (그리고 응용 프로그램을 다시 시작 버그를 해결), 때로는 우려 클래스를 처음으로 사용 (및 응용 프로그램을 다시 빌드 버그를 해결).jar 파일의 ClassNotFoundException

항상 오류를 일으키는 클래스가 같은 것은 아니라는 점에 유의하십시오. Class.forName() 또는 Classloader.loadClass() 또는 ClassLoader.findSystemClass()를 사용하지 않습니다.

모든 클래스를 server.jar -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)

내 자바 버전은 다음과 같습니다 : 자바 버전 "1.7.0_15" 오픈 JDK 런타임 환경 (IcedTea7 2.3.7) (7u15-2.3.7-

이 오류가 내가 얻을 수있다 0ubuntu1 ~ 12.04.1) OpenJDK 64 비트 서버 VM (빌드 23.7-b01, 혼합 모드)

도움을 주셔서 감사합니다!

+1

com.edioromeh.ub.server 패키지의 'Messenger' 클래스는 객체를 deserialize하려고 할 때'class.forName()'을 수행하고 있습니다. 이것은 RMI가 네트워크를 통해 객체를 전달하는 방식과 비슷합니다. 당신이 이것을 밀접하게 연결하는 서버가 있습니까? –

답변

1

ObjectInputStream에 의해 바이트 배열에서 객체를 비 직렬화 할 때, 'ObjectInputStream.resolveClass'메소드가 java.lang.Class.forName0()을 호출하여 스트림을 다음과 같이 만들 것이므로 응용 프로그램이 객체 클래스에 의존해야합니다. 객체.

여기에 응용 프로그램 이름의 클래스에 의존하지 않았다 'com.edioromeh.server.server2server.S2SDroppedItem'

당신은이 클래스를 포함하는 .jar 파일을 찾아 응용 프로그램의 클래스 경로에 넣어 수 있습니다.