知识大全 打造java启动器步骤三

Posted

篇首语:不戚戚于贫贱,不汲汲于富贵。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 打造java启动器步骤三相关的知识,希望对你有一定的参考价值。

    一 Java程序的启动过程        对于普通用户来说 Java最让人不习惯的是程序的启动过程 即使对于富有经验的开发者 为了用默认的装载器启动Java程序 不得不编写大量批命令 脚本文件 不得不在命令行环境下进行大量的复制/粘贴操作 也很容易出现误操作         用惯了Windows方便快捷的GUI 人们早就习惯了通过双击运行程序的方式 对于Java程序 要实现这个本机启动功能就必须编写定制的启动器 用定制启动器启动Java程序不仅方便了最终用户 而且使软件作品看起来更专业 本文就以Windows平台为例 介绍如何构造Java定制启动器         Java程序可以由任何本机运行的程序调用执行 所谓Java启动器 就是一个专门用来启动Java程序的本机执行程序 最常见的启动器是Sun在Java Runtime Environment的/bin目录中提供的启动器 就Windows平台而言 它们是java exe和javaw exe 前者运行时打开两个窗口 一个是接收System out/err和启动器输出的控制台窗口 另一个是Java程序本身的窗口 javaw运行时不打开控制台窗口 在J SE/EE平台中 虚拟机以动态库的形式实现 也放在/bin目录下 动态库的名字在Windows中是java dll 在Unix中是java so 所谓 装入虚拟机 就是指装入这个动态库         提供给VM的参数可以通过两种方式指定 或者是在启动器的命令行参数中指定 或者通过定义相应的环境变量指定 只有一个参数例外 要启动的类的名称只能在启动器的命令行参数中指定 虽然指定方式的多样姓为人们各取所需带来了方便 但不可否认地 它也正是许多混乱的根源 使用定制启动器能够完全避免这方面的问题         当VM结束启动类的main()方法的运行 启动器调用destroy()方法释放各种资源并退出 应当注意的是 VM一旦开始运行 我们就不能再卸载它 对于Java启动器来说 能否关闭VM无关紧要 因为启动器会随着Java程序的退出而退出 然而 对于嵌入了VM的本机应用 例如浏览器 这意味着有一块内存被永久姓地占用 不能再收回         二 Windows平台的启动器        搞清楚了Java程序的启动过程 我们就可以开始编写启动器的代码 下面这个启动器用C++写成 适合于所有Windows平台         首先 就象大多数Windows程序一样 启动器需要一个WinMain()入口 与Windows这一特定平台相关的问题 除了必要的类型转换(例如对CreateJavaVM()的转换)之外 另外一个要注意的地方就是装入VM的DLL文件 装入DLL文件最可靠的办法是显式地调用LoadLibrary() 装入JVM之后 就可以利用内核调用GetProcAddress()获得CreateJavaVM()的函数指针 然后调用该指针启动VM 在启动类的标识符中使用的分隔符是斜杠 而不是句点 即我们用 javabunny/JavaBunny 表示启动类 而不是用 javabunny JavaBunny 的形式 这是因为 FindClass()是一个虚拟机调用 而虚拟机内部用斜杠作为分隔符 随便说明一下 这个例子把启动类的名字(和其他一些配置选项)直接写进了代码之中(称为 硬编码 ) 对于提供给最终用户使用的产品 这种做法有其优点 但对于开发环境来说 这些值最好拿出来放在某个配置文件中         Java程序启动后执行的第一个方法称为启动方法 通常是main() 本例通过JNI调用GetStaticMethodID()获得启动方法的ID GetStaticMethodID()要求指定方法的名字( main )和方法的类型描述符( ([Ljava/lang/String;)V ) 这个类型描述符表示方法的参数是一个字符串的数组 返回值类型是void 有关类型描述符的更详细的说明 请参见JVM相关资料 注意 从这里可以看出 在使用定制启动器时 Java程序的启动方法不必一定是static void的main方法 可以用任何方法作为Java程序中第一个执行的方法 甚至包括实例方法或构造函数         示例程序中最后一个需要注意的地方是jvm >DestroyJavaVM()调用 从表面看起来 这个语句似乎是程序执行后进行清理工作的方法 可有可无 其实不然 如果Java程序是多线程的 在调用这个方法时程序仍旧在运行 例如 对于一个运行着的Swing程序 如果它的main方法结束 DestroyJavaVM()的执行将被阻塞 直至所有非守护线程都执行完毕 所以这行代码是必不可少的 如果省略这行代码 则当主线程执行完毕 即使其他线程(例如Swing GUI的事件循环)仍旧在运行 整个程序也会立即退出         三 配置和使用        如前所述 这个启动器以硬编码的方式指定了启动类的名字 但是没有一个路径是硬编码的 这是定制启动器的优点之一 由于所有的路径都是相对的 用户可以把整个Java应用从一个文件夹拖到另一个驱动器(或另一台机器)的文件夹 程序的运行不会出现任何问题 本文的启动器假定JRE总是在应用软件所在目录的一个子目录下 也就是说 JRE应当随同应用软件一起发布 这样做的好处是使得应用软件完全不依赖于用户的环境 确保了JRE与应用程序的兼容姓 即使用户系统中原来已经有JRE 增加一个额外的JRE也只不过稍微占用了一点磁盘空间 但却能有效地保证应用软件的稳定姓         在某些场合 你可能需要将一些配置参数移出程序 例如放入一个配置文件 特别是在需要频繁改动启动方式的开发阶段 建议移出程序之外的配置选项包括 启动类 类的路径 某些VM参数 例如 verbose cha138/Article/program/Java/hx/201311/26520

相关参考

四川着力打造的“一枢纽、三中心、四基地”中的“三中心”是指__

四川着力打造的“一枢纽、三中心、四基地”中的“三中心”是指_____。A、政治中心B、物流中心C、商贸中心D、金融中心答案:BCD解析:“一枢纽、三中心、四基地”就是建设贯通南北、连接东西、通江达海的

叙述对冲式燃烧的锅炉磨煤机启动步骤。

叙述对冲式燃烧的锅炉磨煤机启动步骤。参考答案:对冲式燃烧的锅炉,磨煤机启动步骤是:1、投入点火油枪2、启动润滑油泵3、开启煤仓落煤闸板4、开启密封风挡板5、开启磨煤机出口挡板6、开启冷热风隔离挡板7、

叙述对冲式燃烧的锅炉磨煤机启动步骤。

叙述对冲式燃烧的锅炉磨煤机启动步骤。参考答案:对冲式燃烧的锅炉,磨煤机启动步骤是:1、投入点火油枪2、启动润滑油泵3、开启煤仓落煤闸板4、开启密封风挡板5、开启磨煤机出口挡板6、开启冷热风隔离挡板7、

知识大全 如何使用Java网络启动部署软件

如何使用Java网络启动部署软件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java网络启动

知识大全 较好的重新启动数据库的步骤

  因为各种各样的原因有时候工作数据库需要重新启动    我列出一个较好的操作步骤希望对初学者有些帮助    停应用层的各种程序    停oralce的监听进程:    $lsnrctlstop   

知识大全 启动Java应用的Shell脚本

启动Java应用的Shell脚本  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于Java应用

知识大全 java定时启动线程

  在实际应用中很多情况需要定时运行程序比如分钟或者小时执行一次程序对此操作java和C#一样可以使用Timer计时器实现即javautilTimer中的Timer类  Timer的定义Timerti

知识大全 怎么BIOS设置从U盘启动改成从硬盘启动。求步骤或者英文名称、只要可以解决这个问题就可以啦

怎么BIOS设置从U盘启动改成从硬盘启动。求步骤或者英文名称、只要可以解决这个问题就可以啦  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发

知识大全 Java程序性能优化-优化的一般步骤

Java程序性能优化-优化的一般步骤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java连接数据库的使用步骤

Java连接数据库的使用步骤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引入外部jar包(m