2011-12-22 4 views
7

무엇입니까 java.lang.UnsupportedClassVersionError 무엇입니까? 무엇이 java.lang.UnsupportedClassVersionError입니까?

은 내가 doc 읽기 : Java 가상 머신이 클래스 파일을 읽어들이려고, 파일 내의 메이저 및 마이너 버전 번호가을 지원되어 있지 않다고 판단했을 경우에 슬로우 하지만, 그 의미를 무엇을하는지 이해할 수 없었다.

주 및 부 버전은 파일에 무엇이 있습니까?

Exception in thread "main" java.lang.UnsupportedClassVersionError: client (Unsupported major.minor version 51.0) 
    at java.lang.ClassLoader.defineClass0(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:539) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:251) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:55) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:194) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:187) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:289) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:235) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) 

내 컴퓨터에서 잘 작동하지만 다음 예외가 발생되었을 때

나는 다른 사람 컴퓨터에서 응용 프로그램을 시작했다.

답변

10

다른 버전의 JDK 컴파일러는 다른 클래스 버전을 생성합니다. 예를 들어 Java 1.4는 48.0을 생성하고 1.5는 49.0과 1.6을 생성합니다 50.0.

JVM은 일반적으로 자체보다 "적은"JVM에서 클래스를로드 할 수 있지만 결코 커야합니다. 아마도 1.5 JVM에서 1.6 용으로 컴파일 된 클래스를 사용하려고 시도했을 것입니다.

관심있는 경우 클래스 버전을 찾는 데 유용한 도구는 bcel입니다. 특히, 그것은 훌륭한 개미 작업 세트를 가지고 있습니다.

+0

'javap' (java의 내장 디스어셈블러)을 사용하여 메이저 및 마이너 버전을 확인할 수 있습니다. 프로그래밍 방식으로이 버전 검사를 수행하려는 경우 BCEL이 더 적절할 것입니다. – peakit

3

즉, 컴파일러 버전은 클래스를 실행하려는 jvm 버전보다 최신 버전입니다. 시스템의 Java 컴파일러를 다운 그레이드하거나 다른 시스템의 런타임 jvm을 업그레이드하십시오.

+1

세 번째 옵션이 있습니다 (대부분의 Java 컴파일러). 'javac -target 1.1'과 같은 것을 할 수 있습니다. 현대적인 컴파일러는 고대 JVM에 적합한 바이트 코드를 생성합니다. 실제로 컴파일러를 다운 그레이드 할 필요는 없습니다. – emory

+0

@ emory '1.1'은 무엇을 의미합니까? –

+1

@SuhailGupta 예에서 1.7 컴파일러가 있지만 1.1 JVM에서 바이트 코드를 사용하려고합니다. 귀하의 경우 1.6 컴파일러가 있지만 1.5 JVM (http://stackoverflow.com/a/8605030/348975에서와 같이)에서 바이트 코드를 사용하려면 javac -target 1.5를 사용하십시오. – emory