我的机器有1.4和1.6两个版本的JDK,我做了一个桌面应用程序, 使用的是1.6的JDK,在PATH,CLASSPATH,JAVAHOME设置的都是1.6的路径,
但是打包成JAR之后,双击运行却使用的是1.4的JRE, 
我在命令行输入java -version 显示的版本也是1.6,
要用1.6运行只能 执行java -jar -xxx.jar这样来运行,
这是怎么回事呢,为什么设置的都是1.6了还是会用1.4的虚拟机来运行JAR包

解决方案 »

  1.   

    卸载你的1.4 难道有问题吗?为何非得用2个版本呢?呵呵!修改环境变量的JAVA_HOME 也许有用。 不过我还是建议你
    1 删除1.4
    2 重新安装 6.0, 并注意其JRE的安装,这样注册表里面的就会被覆盖成1.6的JRE了
      

  2.   

    我的习惯是不安装任何JRE或JDK,只是从别的电脑拷贝已经安装好的JDK,需要使用到那个版本再通过环境变量指定。这样子就不会有冲突啦。
      

  3.   

    谢谢因为公司项目一定要用1.4  没有办法 只能N个版本共存啊恩   tavor  谢谢,这个方法确实起了作用,但是还是有问题,现在报could not find the main class异常了,但是同样的JAR 在另一台只装了JDK1.6的机器上是可以直接运行的,是怎么回事呢java2000_net 同样谢谢你!  我已经把环境变量都换成1.6了,现在我只是想知道,除了这些地方(环境变量,WINDOWS的PATH,就是SYSTEM32文件夹)之外,系统是怎么识别要调用哪个虚拟机的,(在WINDOWS的注册表里我也修改过 成1.6了但是还是不起作用)
      

  4.   

    在计算机里存在多套JRE的情况下,那么谁来决定用哪一套JRE呢?这个重大责任就落在java.exe(javac.exe)身上。当我们在命令行输入:
    Java(javac) XXX
    的时候,java.exe(javac.exe)的工作就是找到合适的JRE来执行类文件。java.exe(javac.exe)依照如下逻辑来寻找JRE:自己的目录下有没有JRE目录(这么说并不是非常精确,原因请详见JDK源代码,在此不作特别说明); 
    父目录下的JRE子目录; 
    查询Windows Registry (HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment); 
    所以,java.exe(javac.exe)的执行结果和“您计算机里面哪一个java.exe被执行,然后哪一套JRE被拿来执行java应用程序”有莫大的关系。可用参数-verbose来大致查看调用的JRE的路径。
      

  5.   

    恩 我是没有办法删 公司的项目一定要用1.4的JDK,现在我想知道为什么会这样现在的情况是:
    1.命令行 java -version 显示的是1.6
    2.环境变量 path,classpath,javahome设置的都是1.6
    3.jar文件未放在1.4的目录里,双击运行显示找不到main类,但是使用java -jar xxx.jar命令就能正确执行,在别人机器上(没有装过1.4的机器)也能正确执行
      

  6.   

    双击运行是由windows来决定用什么程序来执行的,你看我在二、三楼的回复,只要这么修改就OK了,如果你改成用WINRAR打开,它自动会用WINRAR来打开的。
    只要按下面面修改文件打开方式就OK,你要选成用你想用JRE版本下的javaw.exe运行
      

  7.   

    我已经这么修改了 确实 执行方式有所不同,但是提示无法找到main类
    问题也就出在这里,同样的JAR在没有1.4的机器上就能够正确执行,但是在我这里就是无法找到MAIN类,
    同样的 在命令行执行java -jar xxx.jar这样 还是能够正确执行的
      

  8.   

    我已经这么修改了 确实 执行方式有所不同,但是提示无法找到main类
    问题也就出在这里,同样的JAR在没有1.4的机器上就能够正确执行,但是在我这里就是无法找到MAIN类,
    同样的 在命令行执行java -jar xxx.jar这样 还是能够正确执行的
      

  9.   

    哥们,你要看清楚了,原先的可不光是指定了哪个程序的,它的后面还有参数的
    下面是我本机上的,你参照修改即可"C:\Program Files\Java\jre1.6.0_05\bin\javaw.exe" -jar "%1" %*
      

  10.   

    个人感觉多个JRE不会影响任何问题,动不动就删除其它的JRE不是解决问题的根本方法,各位大佬 还是慎之。