晚上琢磨ant的使用,需要用java javac编译文件,出现了如上问题。网上找了篇文章,再结合自己的情况改动了下,留着备份记录。
1.进行win8下Java环境变量配置,在"系统变量"下进行如下配置:
(1)新建->变量名:JAVA_HOME变量值:F:Program Files (x86)Javajdk1.7.0_67
(2)编辑->变量名:Path在变量值的后面加上:;%JAVA_HOME%in;
(3)新建->变量名:CLASSPATH变量值:):F:Program Files (x86)Javajdk1.7.0_67lib
注:jdk1.6以后的环境变量配置已经没有那么复杂了,不在需要配置.;的形式。
问题:解决了问题1之后,对与HelloWord.java 输入javac HelloWorld之后出现 UnsupportedClassVersionError 错误:
这个很明显是一个版本不支持的问题,经过搜索发现问题所在:
出现java.lang.UnsupportedClassVersionError 错误的原因,是因为我们使用高版本的JDK编译的Java class文件试图在较低版本的JVM上运行,所报的错误。
因为,高版本的JDK生成的class文件使用的格式,可能与低版本的JDK的.class文件格式不同。这样,低版本的JVM无法解释执行这个.class文件,会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。
分别输入java -version 和javac -version
我的编译环境是1.7的,而运行环境是1.6的,果然是这个问题。
解决方案1:
分析:可能是安装oracle数据库在配置jdk路径之前,导致运行命令调用了oracle自带的jdk,从而导致这个问题。
解决方案:把PATH变量末尾的;%JAVA_HOME%in挪到最前面,重启窗口。(dos启动时会加载环境变量)
解决结果:
解决方案2:
在注册表中修改:HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment 改为1.8
再次运行java -version
总结:
方案一和二本质上是一样的,需要保持一致。从这个问题建议大家把path中%JAVA_HOME%in给放到最前面,当然你的jdk版本得支持你后面需要安装的软件。
总结几个知识点吧~~
JDK、JRE有什么区别:
Jre 是java runtime environment的缩写, 是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦, 还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢? Javajdk jreinclient里面是不是有一个jvm.dll呢?那就是虚拟机。
Jdk 是java development kit,是java的开发工具包,里面包含了各种类库和工具。当然也包括了另外一个Jre--------Javajre. 那么为什么要包括另外一个Jre呢?而且jdkjrein同时有client和server两个文件夹下都包含一个jvm.dll。 说明是有两个虚拟机的。
Javajdkin这个bin下有各种java程序需要用到的命令,与Javajdkjrein或者Javajrein的bin目录最明显的区别就是Javajdkin下才有javac.exe,这一点很好理解,因为 jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质的 jvm, 而仅仅作为运行环境的jre下只需要client性质的jvm.dll就够了。
我们用的java命令并不是 Javajdkin目录下的而是Javajdkjrein目录下的。不信可以做一个实验,大家可以把Javajdkin目录下的java.exe剪切到别的地方再运行 java程序,发现了什么?一切OK!
如果java为了提供给大多数人使用,他们是不需要jdk做开发的,只需要jre能让java程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?
所以安装jre的时候安装程序自动帮你把jre的java.exe添加到了系统变量中,因此去C:Windowssystem32下面去看看吧,发现有一个java.exe。