如何让java运行在指定版本的JRE中
来源:互联网 发布:nba奇葩数据 编辑:程序博客网 时间:2024/05/15 08:26
写个主要想法是java 版本众多,也不知道客户安装那个版本java. 还有就是为了简化发布工作,可以直接把文档发送到客户端就可以了.
首要有必要了解一下java.exe 如何寻找JRE库的:
当在控制台执行java.exe,操作系统寻找JRE的方式如下:
1) 先找当前目录下有没有JRE
2)再找父目录下有没有JRE
3)接着在PATH路径中找JRE
4)注册表HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment/ 查看CurrentVersion的键值指向哪个JRE
2.JRE类库查找
JRE自带的基础类库主要是JRE/lib/rt.jar这个文件,包括了Java2平台标准版的所有类库。和JRE的版本一致。
JRE中由ClassLoader负责查找和加载程序引用到的类库,基础类库ClassLoader会到rt.jar中自动加载,其它的类库,ClassLoader在环境变量CLASSPATH指定的路径中搜索,按照先来先到的原则,放在CLASSPATH前面的类库先被搜到,Java程序启动之前建议先把PATH和CLASSPATH环境变量设好,OS通过PATH来找JRE,确定基础类库rt.jar的位置,JRE的ClassLoader通过CLASSPATH找其它类库。但有时候会出现这样的情况,希望替换基础类库中的类库,那么也可以简单的通过-Djava.endrosed.path=...参数传递给java.exe,于是ClassLoader会先于基础类库使用java.endrosed.path参数指定路径的类库。因此Java的版本管理是非常简单有效的,也许很原始,不过很好用,简单就不容易出错。
3.Java的虚拟机启动和加载类库
在Console执行java.exe xxx命令以后,如前所述的寻找JRE,OS找到JRE目录,根据java.exe的传递参数,选择加载Server版的jvm.dll还是Client版的jvm.dll,然后加载jvm.dll,把控制权交给jvm.dll。
接下来,jvm.dll进行初始化,分配内存等等动作,然后在CLASSPATH路径中寻找class,找到class以后,寻找class中的程序入口点Main函数,然后从Main函数执行程序,在执行过程中,使用ClassLoader动态加载一系列引用到的类。当调用到native方法时,jvm.dll告诉OS在JRE/bin目录下寻找某某DLL文件,调入内存,于是实现了JNI调用。
最后简单说运行实现我们希望目的目录结构(以test目录为例):
test 存项目java文件生成的.class,.jar 等文件.
test/jre/bin 复制对就jdk中的 bin目录就可以。
test/jre/lib 复制对就jdk中的 jre/lib 目录就可以。
建立以上目录结果之后就可以将test/jre/bin/java.exe 发送到桌面快捷方式。
然后修改一下那快捷快方式 目标(T)标位 改成 ...../test/jre/bin/java.exe test ,
这里要注意的是 起始位置(S) 一起在改一下!如下:...../test/ 这个为什么就不用我说了,自己体会吧。:D
对了,再烦一下,使用javaw.exe 试试,可以不要那个该死的console窗口哦。哈哈。
- 如何让java运行在指定版本的JRE中
- 如何让Tomcat在指定JDK版本下启动 而不依赖环境变量中配置的版本
- 在VB中如何让线程或进程在指定的CPU上运行
- java程序在eclipse中如何添加不同版本的jre
- 如何让进程运行在指定的cpu上
- 如何让IE10运行64位的JRE
- 让进程运行在指定的CPU
- 配置让jre运行打包好的java程序
- 如何在官网下载java JDK或JRE的历史版本
- windows下安装多个jdk,并让tomcat运行指定的jre
- windows下安装多个jdk,并让tomcat运行指定的jre
- 让Java程序自带JRE运行
- 如何在VS2017版本的软件中运行JAI_SDK_sample工程
- 如何在仅仅有jre的环境,运行jar包
- 在SQL Server2000中如何让table存放在指定的file group中?
- 怎样在浏览器中修改applet使用的jre版本
- git 如何让单个文件回退到指定的版本
- git 如何让单个文件回退到指定的版本
- C# 类型转换
- Java 反射机制
- js匿名函数的作用
- 使用VIM编辑C程序
- C#经典面试之概念
- 如何让java运行在指定版本的JRE中
- 如何使用工作流做项目
- JRE与JVM的区别
- C# LINQ基本用法(4) ---LINQ To DataSet
- 测试CSDN哪些号未注册
- C# 绘制统计图(柱状图, 折线图, 扇形图)
- JDK,JRE,JVM的区别[转]
- instead of触发器
- NAND FLASH的MLC和SLC架构区别