信息产业培训网

手编写启动JAVA程序的EXE文件

http://www.miiceic.org.cn   2008-11-5 11:28:39   中程在线   浏览数:
关键字:启动JAVA程序 EXE文件

  有大多的Java人,在四处寻找能将jar打包成exe的工具,另我十分不解的是为什么要打包呢,其实目的无非是想用exe启动而已,其实打包真的没什么好处,一个5m的程序打包成exe还可以,如果一个100m的程序呢?如果这个100m的程序同时还要集成jre呢.打包后启动速度应该不用我多说,而且目前几乎所有打包程序都不是很完美,之所以这些打包程序还可以使用,是因为他们失效的情况,只在很特别的场景下才能遇到,这些工具我也用过一些,感觉不尽如人意.

  其实我们平时使用的90%的程序都不是一个exe就能搞定的,而是很多个文件,我们只是用一个exe文件启动程序而已,本这这个思想,我一直想写个java 的exe启动器,因为我还略懂点c++和delphi,当然只是皮毛了,好在完成这件事只用皮毛的知识应该足以.虽说做起来也遇到很多困难,不过最后还是完成了.

  因为C++版本的国外已经有人写过了http://download.csdn.net/source/528223

  所以这次我写了个Delphi版的

  在放代码前,先介绍下这个工具,暂时我给它起的名字也叫javalauncher

  使用方法:

  文件存放结构

  Test.jar

  javalauncher.ini

  javalauncher.exe

  jre

  test.jar是要启动的java程序,这个有点像废话

  jre是jre,还是废话,不过这个jre可以选择精简版的,我选择的这个精简版只有15M

  如果test.jar依赖了其他的jar包,可以放置在\jre\lib\ext里面或者

  修改test.jar中的META-INF\MANIFEST.MF文件

  添加如下行

  Class-Path: swt.jar

  稍后我提供的demo是将swt.jar放置在了jre\lib\ext中.因为我的demo是用swt写的,因为用swt写的话可以把jre中swing相关的都删掉.节省不少空间呢.

  让我们看看javalauncher.ini配置文件是如何编写的吧

  [blog.csdn.net/sunyujia]

  command=./jre/bin/javaw.exe

  options= -jar Test.jar

  command是指明javaw所在位置,可以用相对路径,如果是使用系统中已经安装的jre直接写javaw.exe即可

  options是javaw的参数

  非常遗憾的是,我发现我们日常平时使用的命令java 包.类,这种写法并不支持,也就是说想用这个工具启动必须使用-jar

  我目前尚未找到原因,初步分析,通过delphi的ShellExecute给javaw.exe传递参数时,javaw.exe只能识别-开头的参数

  好在javaw的所有参数都是-开头的,只有上面说的那种情况不是.

  我已经将工具和例子上传到 http://download.csdn.net/source/743727

  这个例子只有10m可在没有安装jre的机器上执行,例子是基于swt的写的.

  启动这个例子的方法只要运行javalauncher.exe即可.想要给这个exe换图标的话,大家可以使用ResHacker这个工具

  大家以后可以通过例子中的javalauncher.exe来启动java程序了,多么美好的事情,^_^

  告诉大家个秘密,这个exe的文件名是可以更改的,比如改成abc.exe,相映的修改javalauncher.ini为abc.ini即可

  我相信此文的更多读者希望看到的是java源码,对delphi一定是不感冒了,所以我还是先放这次用于测试的java例子的源码吧.

  package com.syj;

  import org.eclipse.swt.SWT;

  import org.eclipse.swt.events.SelectionAdapter;

  import org.eclipse.swt.events.SelectionEvent;

  import org.eclipse.swt.layout.FillLayout;

  import org.eclipse.swt.widgets.Button;

  import org.eclipse.swt.widgets.Display;

  import org.eclipse.swt.widgets.Shell;

  public class HelloSWT {

  public static void main(Strin

  lementation

  {$R *.dfm}

  procedure TForm1.FormCreate(Sender: TObject);

  begin

  application.ShowMainForm:=false;//隐藏窗体

  ConfigFileName:=ExtractFileName(Application.ExeName);//获取当前程序文件名

  ConfigFileName:=Copy(ConfigFileName,1,Length(ConfigFileName)-Length(ExtractFileExt(ConfigFileName)));//获取去掉扩展名

  ConfigFileName:=GetCurrentDir+'\'+ConfigFileName+'.ini';//拼凑成与同当前exe文件同名的ini文件

  //showmessage(ConfigFileName);//use debug

  JvmConfig:=TIniFile.Create(ConfigFileName); //读取ini文件

  command:=JvmConfig.ReadString('blog.csdn.net/sunyujia','command','');

  options:=JvmConfig.ReadString('blog.csdn.net/sunyujia','options','');

  //showmessage(command); //use debug command

  //showmessage(options); //use debug options

  JvmConfig.Free;

  ShellExecute(Application.Handle, 'open', pchar(command), pchar(options),pchar(GetCurrentDir) , 1);

  application.Terminate;

  end;

  end.

  最后欢迎大家测试,并提出宝贵意见.

来源:华军软件园
相关连接
最新评论
*以下网友发言不代表中程在线网站的观点和看法
    我要评论

    请您注意
    1、遵守中华人民共和国的各项有关法律规定
    2、承担一切因您的行为而导致的法律责任
    3、本网留言管理人员有权删除其管辖留言内容
    4、您在本网的留言本网有权在网站内转载和引用
    5、参与本留言即表明您已经阅读并接受上述条款
    我爱研发网希赛网软件测试网中电华信太平洋电脑网天空网
    电脑爱好者泡泡网华军软件霏凡软件站软件开发网腾讯网
    eNet下载汉化新世纪小熊在线BIOS之家数动连线....[更多]
    关于我们 | 网站地图 | 周边住宿 | 行车路线 | 联系我们 | 网站律师 | 意见反馈 | 虚位以待 | 友情链接
    中程在线(北京)科技有限公司 版权所有
    总 部:北京市海淀区青东商务楼A座西四层
    企业培训部:010-52636110 52636106 就业培训部:010-68716925 68716926
    邮 件:training@miiceic.org.cn
    京ICP备06053134号
    Copyright © 2005-2008 Miiceic.org.cn All Rights Reserved