UnsupportedClassVersionError的解决

来源:互联网 发布:手机淘宝10.0 编辑:程序博客网 时间:2024/05/01 04:04
 今天看Eclipse的一个教程,里面有一段代码:java.lang.UnsupportedClassVersionError

  1. package math;

  2. public class ErrorTest {

  3.     public static void main(String[] args) {
  4.         System.out.println( factorial(6) );
  5.     }
  6.     
  7.     public static int factorial(int value) {        
  8.         if ( value == 0 ) {
  9.             return value;
  10.         } else {
  11.             return value * factorial(value-1);          
  12.         }       
  13.     }

  14. }

照着写好编译运行,结果console出现如下异常提示:

java.lang.UnsupportedClassVersionError: math/ErrorTest (Unsupported major.minor version 49.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)
Exception in thread "main"

baidu了一下,说是用高版本jdk编译好的class无法在低版本JVM上运行导致的。这一问题在jdk1.5和更早版本这两者之间尤其明显。
别说,我真的是装了1.42和1.5两个版本的jdk。

解决办法:以IDE使用Eclipse为例,打开菜单 Windows -> Preferences -> Java-> Compiler, 在JDK compiliance里面compiler compiliancelevel一项改成和机器正在用的JVM同样版本,我的情况是从1.5改成1.4。

另外,如果之前对某个project单独设置过build path或者compile设置,最好改完上面的也单独看一下那个project的设置是否一起变过来了。我的情况就是没变过来还要专门改一次。