版本问题 -Unsupported major.minor version 49.0

 自从J2SE 5.0出来以后,越来越多的人遇到了Unsupported major.minor version 49.0问题,也就是java.lang.UnsupportedClassVersionError错误。 那到底是怎么一回事呢,这里来稍微分析一下。

        JDK编译的时候是把Java的源代码编译为字节码的形式,相信这点大多数人都很清楚。在J2SE1.4的时候编译的是J2SE1.4的字节码形式,在J2SE5.0是5.0的字节码形式,一般只具有向下兼容性,也就是说在J2SE5.0中可以运行J2SE1.4的字节码,但是反过来则不行,在J2SE1.4下运行了J2SE5.0编译出来的字节码,就会出现上面所说的java.lang.UnsupportedClassVersionError错误了。

        解决方法自然只有2种,一种是把编译器的版本降低,比如说采用J2SE1.4的编译器把代码重新编译一次,或者在J2SE5.0下采用J2SE1.4兼容的字节码形式进行编译。比如SUN的JDK下,采用-target选项就可以指定1.4或者1.3字节码兼容的形式进行编译了。第二种解决方法就是把运行环境中的Java版本上升,比如换成JRE5.0。在一般真实的项目中,运行环境的版本通常是固定的,采用第一种方法解决的可能性要大一些。

        下面来说一下如何来检测你的字节码是不是版本过高什么的。有时候你开发环境用的第三方工具,比如WSAD或者RAD或者别的什么,那里面编译器设置比较复杂,你可能最后已经搞不清楚你的字节码到底是什么版本的JDK编译的了。这个时候你可以另外装两个JDK,一个1.4的,一个5.0的。然后在你的开发环境中写一个Hello World的程序,把编译好的class文件copy过来,分别用1.4和5.0的JDK来运行,如果1.4运行不了,出现java.lang.UnsupportedClassVersionError错误的话,但是5.0可以顺利运行,那说明你开发环境就是用的5.0的编译器,而且用的是5.0字节码的形式,如果1.4可以运行,至少说明你开发环境字节码版本在1.4或者更低版本的形式了。

        最后,还要注意一点的是,不仅你的class文件要注意,所有在classpath下用到的lib的jar文件的版本也要注意,如果jar文件里面的class以前是高版本JDK编译出来的字节码形式,那也同样会出java.lang.UnsupportedClassVersionError错误的。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值