求助!java虚拟机问题

markgoo 2008-05-29 09:02:18
我的机器有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包
...全文
144 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
favorite7w 2008-05-29
  • 打赏
  • 举报
回复
在计算机里存在多套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的路径。
wanglu_1984 2008-05-29
  • 打赏
  • 举报
回复
容易混乱,我用的1.4和1.5的,后来经常出错,就把1.4的删了,建议楼主
markgoo 2008-05-29
  • 打赏
  • 举报
回复
谢谢

因为公司项目一定要用1.4 没有办法 只能N个版本共存啊

恩 tavor 谢谢,这个方法确实起了作用,但是还是有问题,现在报could not find the main class异常了,但是同样的JAR 在另一台只装了JDK1.6的机器上是可以直接运行的,是怎么回事呢

java2000_net 同样谢谢你! 我已经把环境变量都换成1.6了,现在我只是想知道,除了这些地方(环境变量,WINDOWS的PATH,就是SYSTEM32文件夹)之外,系统是怎么识别要调用哪个虚拟机的,(在WINDOWS的注册表里我也修改过 成1.6了但是还是不起作用)


favorite7w 2008-05-29
  • 打赏
  • 举报
回复
我的习惯是不安装任何JRE或JDK,只是从别的电脑拷贝已经安装好的JDK,需要使用到那个版本再通过环境变量指定。这样子就不会有冲突啦。
老紫竹 2008-05-29
  • 打赏
  • 举报
回复
卸载你的1.4 难道有问题吗?

为何非得用2个版本呢?呵呵!

修改环境变量的JAVA_HOME 也许有用。 不过我还是建议你
1 删除1.4
2 重新安装 6.0, 并注意其JRE的安装,这样注册表里面的就会被覆盖成1.6的JRE了
tavor 2008-05-29
  • 打赏
  • 举报
回复
tavor 2008-05-29
  • 打赏
  • 举报
回复


按照上图上的,改一下文件夹选项中的设置就OK了
tavor 2008-05-29
  • 打赏
  • 举报
回复
个人感觉多个JRE不会影响任何问题,动不动就删除其它的JRE不是解决问题的根本方法,各位大佬 还是慎之。
tavor 2008-05-29
  • 打赏
  • 举报
回复
哥们,你要看清楚了,原先的可不光是指定了哪个程序的,它的后面还有参数的
下面是我本机上的,你参照修改即可

"C:\Program Files\Java\jre1.6.0_05\bin\javaw.exe" -jar "%1" %*
cuijie_cn 2008-05-29
  • 打赏
  • 举报
回复
还是留一个版本好
markgoo 2008-05-29
  • 打赏
  • 举报
回复
我已经这么修改了 确实 执行方式有所不同,但是提示无法找到main类
问题也就出在这里,同样的JAR在没有1.4的机器上就能够正确执行,但是在我这里就是无法找到MAIN类,
同样的 在命令行执行java -jar xxx.jar这样 还是能够正确执行的
markgoo 2008-05-29
  • 打赏
  • 举报
回复
我已经这么修改了 确实 执行方式有所不同,但是提示无法找到main类
问题也就出在这里,同样的JAR在没有1.4的机器上就能够正确执行,但是在我这里就是无法找到MAIN类,
同样的 在命令行执行java -jar xxx.jar这样 还是能够正确执行的
tavor 2008-05-29
  • 打赏
  • 举报
回复
双击运行是由windows来决定用什么程序来执行的,你看我在二、三楼的回复,只要这么修改就OK了,如果你改成用WINRAR打开,它自动会用WINRAR来打开的。
只要按下面面修改文件打开方式就OK,你要选成用你想用JRE版本下的javaw.exe运行
markgoo 2008-05-29
  • 打赏
  • 举报
回复
恩 我是没有办法删 公司的项目一定要用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的机器)也能正确执行


62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧