产品首页

使用说明

典型示例

下载

购买

技术支持

信息反馈

 

JarToExe 转换向导技术支持页

工具:将 Jar 文件转换为 Exe 可执行文件。


1. 可执行文件的运行环境

    生成的可执行文件,运行时需要 JRE 环境。

    可执行文件能够从 "注册表"、"环境变量"、"配置文件" 获得 JRE 环境的存放位置。默认情况下,以 "配置文件" 优先:

  1. 配置文件
    在配置文件中使用 "jvmdll" 项,可指定所使用用的 JRE 环境。[详情参见:配置文件]
     
  2. 注册表
    正常安装 JRE,注册表中会记录相应配置。可执行文件可自动获得当前安装的 JRE 环境。
     
  3. 环境变量
    使用环境变量 JAVA_HOME 或者 JRE_HOME 指向 JDK 或 JRE 根目录,可执行文件能够自动获得所指向的 JRE 环境。
     
  4. JRE 优先顺序
    配置文件中使用 "jre_order" 项,可以调整查找 JRE 的优先顺序。[详情参见:配置文件]

2. 配置所需的其他 jar 库

    可执行文件在执行时,如果还需要其他 jar 库,可以通过环境变量或者配置文件进行追加:

  1. 环境变量
    使用环境变量 CLASSPATH 或者 CLASS_PATH 指定多个 jar 文件。
     
  2. 配置文件
    在配置文件中使用 "classpath" 项,可指定所需的其他 jar 文件。[详情参见:配置文件]
     
  3. 将依赖的 jar 一起打包到生成的 exe 文件中
    生成工具可以不将 jar 文件解压,即可将依赖的 jar 一起打包到 exe 文件中。

3. 设定 JVM 参数

    更多 JVM 参数可通过配置文件进行设置:

  1. 配置文件
    在配置文件中使用 "option" 项,可配置 JVM 参数。[详情参见:配置文件]
     
  2. 配置 property
    配置文件中使用 "property" 项,可配置系统 property。
    比如:"property a=1" 相当于 "option -Da=1"
     
  3. 引用系统环境变量
    option 或 property 中可使用 %name% 格式引用系统环境变量。

4. 可执行文件全路径的获取

可执行文件运行时,可通过 System.getProperty 获取 exe 可执文件全路径:

String exepath = System.getProperty("j2e.app.path");

获取 exe 文件所在目录:

String exedir = System.getProperty("application.home");

5. 关于配置文件

5.1 配置文件名的命名规则

    配置文件名:与可执行文件文件名相同。
    扩展名:为 ".cfg" 或者 ".config" 。

    举例:test.exe 相应的配置文件为 "test.cfg" 或者 "test.config" 。如果两个配置文件同时存在,则只有 ".cfg" 会被使用。


5.2 使用 "jvmdll" 项指定 JRE 环境

    在可执行文件相应的配置文件中,使用 "jvmdll" 项指定文件 jvm.dll 的位置,可使可执行文件使用指定的 JRE 环境。

    如果所指定的 jvm.dll 路径以 "/" 或者 "盘符" 开头,则认为该路径为绝对路径。如果所指定的路径以目录名开头,则认为该路径为相对于可执行文件的相对路径。

    比如,对于 test.cfg,如果以绝对路径指定 JRE 环境:

jvmdll C:\j2sdk1.4.2\jre\bin\server\jvm.dll

    如果把 jre1.5.0 目录复制到可执行文件所在目录,可采用相对路径指定 JRE 环境:

jvmdll jre1.5.0\bin\client\jvm.dll

    使用相对路径指定 JRE 环境的这种办法,常用于软件发行时,将 jre 目录与可执行文件一起打包。在软件执行时,可以不要求所在计算机上安装 JRE。


5.3 使用 "classpath" 项配置所需的其他 jar 文件

    可执行文件在运行时,如果需要其他的 jar 文件,可使用 "classpath" 项进行追加。使用分号 ";" 对多个 jar 文件进行分隔。

    举例:

classpath E:\proj\classes;.;D:\lib1.jar;D:\lib2.jar

5.4 使用 "option" 项配置其他 JVM 参数

    在配置文件中,使用 "option" 项可配置更多 JVM 参数 "-X"、"-D" 。

    比如,定义一个 System Property:(不要在 "=" 前后和 "-D" 之后添加空格)

option -Dmyprog.settings=C:\thefile.ini

    则在 Java 代码中,通过以下代码,可获得配置的内容:

String where = System.getProperty("myprog.settings");

5.5 使用 "jre_order" 改变 JRE 优先顺序

生成的 exe 可以从:

c - 配置文件(configuration)
e - 环境变量(environments)
s - 注册表(SUN jre registry)
i - 注册表(IBM jre registry)

获取 JRE 运行环境。

默认的优先顺序为: jre_order=csie ,配置文件中改变字母顺序可以改变 JRE 优先顺序。


6. 关于 javac 参数 -target

    使用 JDK 所带的 javac.exe 命令对 java 文件进行编译时,使用“-target”参数可指定所生成的 class 文件的目标 JRE 版本。在较低版本的 JRE 环境下不能运行“-target”较高的 class 文件。

    为使生成的 class 文件以及最终生成的 Exe 文件有更好的兼容性,编译时应指定尽可能底的目标版本。但如果我们使用了某个 JDK 版本中的新特性或者使用了某个 JDK 版本提供的类,那么指定更低的 JRE 版本为“-target”就没有意义。

    一般情况下,我们使用:

D:\>javac -target 1.2 test/Hello.java

    对于 JDK 1.5,我们应使用:

D:\>javac -source 1.3 -target 1.2 test/Hello.java

7. 关于 Windows NT 服务

7.1 服务的运行和停止

    用 Java 编写的普通控制台程序,即可作为 Windows NT 服务运行。当服务的任务完成后,也就是说 main 方法返回后,或者中途调用 System.exit() 后,服务则停止。

    长时间运行的程序,比如使用了 sleep() 或者 accept() 等方法,服务则一直保持“运行中”状态。通过 Windows 服务管理器,或者“net stop”命令可使服务停止运行。


7.2 服务的暂停和继续

    如果根据需要,要求服务能暂停和继续,可实现 ServiceStatusHandler 接口,并且使 canPause() 方法返回 true:

import com.regexlab.j2e.*;

public class MyHandler implements ServiceStatusHandler
{
    public boolean canPause()
    {
        return true;
    }
}

    然后创建 MyHandler 实例,传递给 ServiceStatusManager 类的静态方法:

ServiceStatusManager.setServiceStatusHandler(new MyHandler());

    这样,服务状态就可以被 Windows 服务管理器暂停或者被“net pause”命令暂停,也可以被 Java 程序主动地设置为暂停状态:

ServiceStatusManager.setServiceStatus(ServiceStatusManager.STATUS_PAUSED);

    这两个类的代码可在本页底下载。[更多详情参见:ServiceStatusHandler]


7.3 服务的安装和卸载

    生成的 Windows NT 服务类型的可执行文件中,自带安装和卸载服务功能。安装办法是:使用 /install 参数运行可执行文件。以 [演示三] 为例:

D:\>service.exe /install

    如果需要安装成开机自动运行,则使用 /install auto,举例:

D:\>service.exe /install auto

    使用 /uninstall 参数可卸载服务:

D:\>service.exe /uninstall

7.4 服务程序的测试运行

    为检验运行环境和配置文件是否正常,可使用 /test 参数测试运行 Windows NT 服务程序。使用 /test 参数可将 Windows NT 服务程序作为一个 Console 程序运行:

D:\>service.exe /test

7.5 类 ServiceStatusManager.java

    本页底端可下载 Java 与 Windows 服务管理器交互的接口代码包。其中一个类是:

public class ServiceStatusManager;

    这个类主要用于从 Java 中主动设置服务状态,方法为:

public static void setServiceStatus(int status);

7.6 接口 ServiceStatusHandler.java

    另外一个类为接口:

public interface ServiceStatusHandler;

    这个接口主要用于:当服务被 Windows 服务管理或者“net stop”命令改变状态后,通过这个接口获取事件

package com.regexlab.j2e;

public interface ServiceStatusHandler
{
    /**
     * Tell the service manager whether PAUSE/CONTINUE is supported.
     * @return true means this service can be paused
     */

    public boolean canPause();

    /**
     * Pause/continue event handle methods
     * @return must return true if pause successfully
     */

    public boolean onPause();

    /**
     * Pause/continue event handle methods
     * @return must return true if continue successfully
     */

    public boolean onContinue();

    /**
     * Stop service event handle method
     * @return no use
     */

    public boolean onStop();
}

    使用方法为:实现该类,然后将实例传递给 ServiceStatusManager 的静态方法:

ServiceStatusManager.setServiceStatusHandler(new MyHandler());

    支持“暂停/继续”的 Windows NT 服务示例,请参阅“演示四”。


7.7 代码下载和文档

接口代码下载:[接口代码下载] - 4kb

接口代码文档:[javadoc]


 

 

RegExLab.com © 2005 -   渝ICP备05015140号