写了个能把Jar打包成EXE发布到没有Java的电脑也可以运行的程序,没人感兴趣?

时间:2022-01-21 09:39:29

辛辛苦苦写好了程序,写了Demo,居然没人来看,唉,一点修改的动力都没有了。
难道大家都喜欢BAT,喜欢发布原生的Jar文件,就是对EXE有偏见?
Jar跨平台,可是为了跨这个平台,似乎把80%的普通电脑用户跨过去有点说不过去。
发这个帖子就是想听听大家对这个程序有什么看法,如果这样发布成EXE程序确实没有什么价值,我也好放弃它不要浪费太多的时间在上面了。

在这里是原文: http://blog.csdn.net/Frogant/archive/2008/03/29/2227729.aspx

初学Java,真的很想听听大家的看法。

19 个解决方案

#1


很有趣啊,这样也可以让JAVA应用程序得到多点的用户````不过貌似没什么用````

#2


我想说,如果写的是JAVA界面程序,怎么打包法?不只一个JAR哦

#3


很多程序都是java编的啊...
dreamweaver8,内置了一个jvm 22MB
zendstudio5.5 内置jre 66MB
附赠一个绿色版的jvm不就能运行了...还打包成exe干嘛...

原来我也希望打包exe,可是后来确实觉得没必要....
exe运行在windows下→调用内部jre运行在java平台下→jvm运行在windows平台下...很晕...呵呵

#4


晕 这问题真无聊 那JAVA还跨什么平台?

#5


哈,这种程序只适用于用J2SE写桌面/手机应用,对于J2EE来说,对企业用户,为了程序稳定,内置一个JRE没有任何问题。
但是普通用户呢?你的程序动不动就好几M,附赠不见得在任何时候都合适,请问,如果人家就是喜欢你的程序,想弄成绿色版放在U盘上怎么办?
个个都能写出DW这样的程序来?不见得吧。
我理解的Java 跨平台,主要还不是跨操作系统,而是PC和受机双平台,那也要先在PC上解决随处可以运行的问题才有意义。

没去看那个Hello World? 用的难道不是Swing?其实不应该叫打包,只是给你的JAR加一个可以运行的PE格式文件头,让你的JAR可以自动判断JRE环境罢了。

这个程序不想完善了,稍候源码放出,用AutoIt写的,因为想实现自动下载JRE这个思路才特意找AutoIt的资料,有兴趣的可以关注一下。

如果一定喜欢Jar所谓的跨平台,知不知道你发布出来的Jar格式有多少人根本不会运行?附赠一个绿色版,难道不写一个EXE包装一下,另外再附赠一个绿色版的BAT?

#6


我觉得还是自带jre比较稳妥一些,万一用户不能上网呢?

#7



2楼问的好像是部署的问题,我也是新手,不过写过一个内置浏览器的Java程序,需要附带一些JAR组件包和几个DLL文件发布以后才可以运行。

看了下有htmlparser.jar,jdic2.jar,nekohtml.jar,jdic.dll,IeEmbed.exe等等,是从网上下的,没有这几个文件程序里面的类就不工作。我从网上找的办法说是要把DLL文件放到windows\system32里面去,结果不行。后来是这样解决的,在要发布的Jar文件的那个文件夹里面建一个lib文件夹,把那些.jar和.dll文件放进去,本来是用javaw.exe -jar myjar.jar 这样来运行的,改成 javaw.exe -Djava.library.path=./lib/ -jar myjar.jar 来运行就可以了。如果是写bat来发布,把这行写进去就可以。如果是用安装程序来打包,我想生成的快捷方式也是应该是设成这样吧,没做过。
我比较懒,所以我把这个参数直接写进那个EXE里面去了,反正程序是我写的,爱怎么改就怎么改,哈哈。

所以你要试试的话,如果你的程序也要和组件包一起发布,建个lib文件夹,把要用的jar和dll什么的拉进去,把JarRun.exe 放到你的主文件夹,然后把你的Jar文件拉到JarRun.exe 上,你就得到了一个可以运行的EXE文件。只要你的Jar没有问题,你的EXE也不会有问题。然后JarRun.exe 删除,把你的EXE和Jar一起发布就可以了。你的EXE文件比的Jar文件大不了多少,如果你连JRE都敢一起送给用户,多送他一个EXE文件实在也不是什么大不了的问题。因为EXE文件可以有自己的图标,而JAR是不可以的,一般你也会在用户的桌面生成一个快捷方式的吧,一般用电脑的人都知道把程序装在C盘以外的地方的,如果他中了病毒重装了电脑,重装了WinRAR,但可能忘了装JAVA而你的快捷方式也被弄丢了,这时候,如果人家对你的程序有点印象,可能还记得他曾经安装的文件夹,当他打开这个文件夹,他回看到什么呢?如果没有EXE,只有JAR,那么不好意思,WinRAR会好不留情的把你的Jar可爱的五脏六腑展示给用户。如果你实在想得很周到,连这种情况都料到了,没有忘记给用户一个"如果重装请点我.bat"文件给他,他会感激你的。如果你和我一样,想对用户更亲切一点,给他提供了一个EXE文件给他,图标和他以前在桌面看到的图标一模一样,而且那个文件夹再没有什么多余的文件,文件都在lib里面。我想,也许他会好不犹豫的点这个文件。然后,程序会很可爱的提示他:哇,你忘了装JAVA了,让我帮你装上吧,以前那个文件还在不需要重新下载哦。。。安装完成,你的可爱的图标又自动出现在用户的桌面上,这个样子是不是更容易粘住用户?


所以,不要告诉我,最小的JRE 22M就可以了。我告诉你,当你的程序在没有安装过JRE的电脑上运行一次以后,如果用户把你的文件夹复制到任何地方,都将变成自带一个完整版没有经过任何阉割的JRE最新版,而且很容易就可以更新,-- 15M!是不是更小?而且你的程序在发布的时候不需要捆绑。如果你的程序很强,小于2M就可以提供很多功能,即使在论坛那种对上传文件有限制的地方也会有普通用户免费帮你传播的。如果你的程序必须携带JRE才能给普通用户使用,那就很难预料了。

难道只有当Java发布成Jar的时候才叫跨平台?多发布一个EXE就不算跨平台了,如果老外学说中文的话,那他恐怕也不能算纯种的老外了吧?

#8



万一用户不能上网,那他从哪里得到你的Java程序呢?盗版光盘?

#9


mark,关注

#10



自带JRE也简单嘛,在你的程序所在的文件夹下面建个Install文件夹,把你JRE打包成JRE_Install.exe文件就可以了,绿色的也好,官方的也好,改一下配置文件照样可以。

只是,你到底想不想把你的JAR转换成EXE?

如果有人有兴趣,我把那个写得很垃圾的源码放出来,没人有兴趣说明这种办法实在很笨,那就算了。其实我觉得用Java写桌面程序这事本身就是件吃力不讨好的,打包成EXE又能怎么样,还是离不开JRE。同样的应用,Delphi也能做得不错,虽然语句罗嗦了点,可是人家对用户友好啊。Java,做得最好的是在移动应用上,决定往那个方面看看。。Delphi写PC端,J2ME写手机端,我能想到的入门最快的办法了。

#11



大型Java应用程序,我建议你捆绑JRE,因为你的目标是客户,或者是面向开发者的,而不是普通用户,这些人都知道怎么运行,就算你给他的是源码,是Class文件,连个包都没有,只要你够强,人家不会在乎的。如果你觉得你写的程序这些人看不上眼的,而你想听听普通用户的感受,甚至,你都不怎么关心你的程序在Linux下还算不算是跨平台的(用Linux的也大多是高手,这样的人会不会关心你的小程序?)。。考虑跨平台这种问题的是,是不需要关心程序在用户那里的死活,长命还是短命的----公司里有人专门负责部署,卖出去以后有专人负责维护。如果你写的是这样的程序,这里要讨论的也不是你要关注的问题,我关心的普通用户的感受,是那些看到好像是点了一个WinRAR的压缩包,结果竟然一个窗口弹出来,第一个反应是:哇,又中病毒了!的那种人----看不到扩展名的情况下,有时候我都分不出哪个是Jar哪个是RAR文件,所以我发布的程序里面,组件包的扩展名是被去掉了的,我不想让WinRAR引诱用户去打开来看,那没什么意思,我把.jar去掉了,把那个点放到文件名的第一位,让它给人的第一感觉就是--这是个特殊文件,别去管它.不知道大家都是怎么做的.

#12



不管怎么说,也许我是个另类. 可是,我觉得用Java写程序很酷, 把Java程序打包成不管用户有没有装Java都可以运行的EXE文件也很酷,既然Sun给我们提供了一个下载地址就是为了我们好好利用它,那么,为什么不呢? 如果你认为内置JRE更酷,也许我们看法有点不大一样.....就算我喜欢一个美女,我也不怎么感冒她把老爹老娘兄弟姐妹都随时带在身边.

#13


去看看 支持LZ,生命在于鼓捣...

#14


有很多把jar包装成exe的开源项目了,比如jsmooth,Lanuch4j(这个非常好用),最好自带jre(如果对程序体积大小没有限制的话)。

不过lz的精神很可贵

#15


不错!
用过了,拖到图标上就可以生成,很好
很强大!

#16


exe4j很好用啊! 不过我还是会去看看你的程序的!

#17


从网上下载个exe4j_windows_4_0_3.exe
很容易的就可以把jar文件生成exe文件了.

#18


楼主的精神很可嘉!!!值得赞赏!!!!我刚入门不久!!看到楼上高手的发言,觉得是个值得学习的帖子!!希望有跟多的高手进来发表意见!!

#19


楼主,可以交流下么?

#1


很有趣啊,这样也可以让JAVA应用程序得到多点的用户````不过貌似没什么用````

#2


我想说,如果写的是JAVA界面程序,怎么打包法?不只一个JAR哦

#3


很多程序都是java编的啊...
dreamweaver8,内置了一个jvm 22MB
zendstudio5.5 内置jre 66MB
附赠一个绿色版的jvm不就能运行了...还打包成exe干嘛...

原来我也希望打包exe,可是后来确实觉得没必要....
exe运行在windows下→调用内部jre运行在java平台下→jvm运行在windows平台下...很晕...呵呵

#4


晕 这问题真无聊 那JAVA还跨什么平台?

#5


哈,这种程序只适用于用J2SE写桌面/手机应用,对于J2EE来说,对企业用户,为了程序稳定,内置一个JRE没有任何问题。
但是普通用户呢?你的程序动不动就好几M,附赠不见得在任何时候都合适,请问,如果人家就是喜欢你的程序,想弄成绿色版放在U盘上怎么办?
个个都能写出DW这样的程序来?不见得吧。
我理解的Java 跨平台,主要还不是跨操作系统,而是PC和受机双平台,那也要先在PC上解决随处可以运行的问题才有意义。

没去看那个Hello World? 用的难道不是Swing?其实不应该叫打包,只是给你的JAR加一个可以运行的PE格式文件头,让你的JAR可以自动判断JRE环境罢了。

这个程序不想完善了,稍候源码放出,用AutoIt写的,因为想实现自动下载JRE这个思路才特意找AutoIt的资料,有兴趣的可以关注一下。

如果一定喜欢Jar所谓的跨平台,知不知道你发布出来的Jar格式有多少人根本不会运行?附赠一个绿色版,难道不写一个EXE包装一下,另外再附赠一个绿色版的BAT?

#6


我觉得还是自带jre比较稳妥一些,万一用户不能上网呢?

#7



2楼问的好像是部署的问题,我也是新手,不过写过一个内置浏览器的Java程序,需要附带一些JAR组件包和几个DLL文件发布以后才可以运行。

看了下有htmlparser.jar,jdic2.jar,nekohtml.jar,jdic.dll,IeEmbed.exe等等,是从网上下的,没有这几个文件程序里面的类就不工作。我从网上找的办法说是要把DLL文件放到windows\system32里面去,结果不行。后来是这样解决的,在要发布的Jar文件的那个文件夹里面建一个lib文件夹,把那些.jar和.dll文件放进去,本来是用javaw.exe -jar myjar.jar 这样来运行的,改成 javaw.exe -Djava.library.path=./lib/ -jar myjar.jar 来运行就可以了。如果是写bat来发布,把这行写进去就可以。如果是用安装程序来打包,我想生成的快捷方式也是应该是设成这样吧,没做过。
我比较懒,所以我把这个参数直接写进那个EXE里面去了,反正程序是我写的,爱怎么改就怎么改,哈哈。

所以你要试试的话,如果你的程序也要和组件包一起发布,建个lib文件夹,把要用的jar和dll什么的拉进去,把JarRun.exe 放到你的主文件夹,然后把你的Jar文件拉到JarRun.exe 上,你就得到了一个可以运行的EXE文件。只要你的Jar没有问题,你的EXE也不会有问题。然后JarRun.exe 删除,把你的EXE和Jar一起发布就可以了。你的EXE文件比的Jar文件大不了多少,如果你连JRE都敢一起送给用户,多送他一个EXE文件实在也不是什么大不了的问题。因为EXE文件可以有自己的图标,而JAR是不可以的,一般你也会在用户的桌面生成一个快捷方式的吧,一般用电脑的人都知道把程序装在C盘以外的地方的,如果他中了病毒重装了电脑,重装了WinRAR,但可能忘了装JAVA而你的快捷方式也被弄丢了,这时候,如果人家对你的程序有点印象,可能还记得他曾经安装的文件夹,当他打开这个文件夹,他回看到什么呢?如果没有EXE,只有JAR,那么不好意思,WinRAR会好不留情的把你的Jar可爱的五脏六腑展示给用户。如果你实在想得很周到,连这种情况都料到了,没有忘记给用户一个"如果重装请点我.bat"文件给他,他会感激你的。如果你和我一样,想对用户更亲切一点,给他提供了一个EXE文件给他,图标和他以前在桌面看到的图标一模一样,而且那个文件夹再没有什么多余的文件,文件都在lib里面。我想,也许他会好不犹豫的点这个文件。然后,程序会很可爱的提示他:哇,你忘了装JAVA了,让我帮你装上吧,以前那个文件还在不需要重新下载哦。。。安装完成,你的可爱的图标又自动出现在用户的桌面上,这个样子是不是更容易粘住用户?


所以,不要告诉我,最小的JRE 22M就可以了。我告诉你,当你的程序在没有安装过JRE的电脑上运行一次以后,如果用户把你的文件夹复制到任何地方,都将变成自带一个完整版没有经过任何阉割的JRE最新版,而且很容易就可以更新,-- 15M!是不是更小?而且你的程序在发布的时候不需要捆绑。如果你的程序很强,小于2M就可以提供很多功能,即使在论坛那种对上传文件有限制的地方也会有普通用户免费帮你传播的。如果你的程序必须携带JRE才能给普通用户使用,那就很难预料了。

难道只有当Java发布成Jar的时候才叫跨平台?多发布一个EXE就不算跨平台了,如果老外学说中文的话,那他恐怕也不能算纯种的老外了吧?

#8



万一用户不能上网,那他从哪里得到你的Java程序呢?盗版光盘?

#9


mark,关注

#10



自带JRE也简单嘛,在你的程序所在的文件夹下面建个Install文件夹,把你JRE打包成JRE_Install.exe文件就可以了,绿色的也好,官方的也好,改一下配置文件照样可以。

只是,你到底想不想把你的JAR转换成EXE?

如果有人有兴趣,我把那个写得很垃圾的源码放出来,没人有兴趣说明这种办法实在很笨,那就算了。其实我觉得用Java写桌面程序这事本身就是件吃力不讨好的,打包成EXE又能怎么样,还是离不开JRE。同样的应用,Delphi也能做得不错,虽然语句罗嗦了点,可是人家对用户友好啊。Java,做得最好的是在移动应用上,决定往那个方面看看。。Delphi写PC端,J2ME写手机端,我能想到的入门最快的办法了。

#11



大型Java应用程序,我建议你捆绑JRE,因为你的目标是客户,或者是面向开发者的,而不是普通用户,这些人都知道怎么运行,就算你给他的是源码,是Class文件,连个包都没有,只要你够强,人家不会在乎的。如果你觉得你写的程序这些人看不上眼的,而你想听听普通用户的感受,甚至,你都不怎么关心你的程序在Linux下还算不算是跨平台的(用Linux的也大多是高手,这样的人会不会关心你的小程序?)。。考虑跨平台这种问题的是,是不需要关心程序在用户那里的死活,长命还是短命的----公司里有人专门负责部署,卖出去以后有专人负责维护。如果你写的是这样的程序,这里要讨论的也不是你要关注的问题,我关心的普通用户的感受,是那些看到好像是点了一个WinRAR的压缩包,结果竟然一个窗口弹出来,第一个反应是:哇,又中病毒了!的那种人----看不到扩展名的情况下,有时候我都分不出哪个是Jar哪个是RAR文件,所以我发布的程序里面,组件包的扩展名是被去掉了的,我不想让WinRAR引诱用户去打开来看,那没什么意思,我把.jar去掉了,把那个点放到文件名的第一位,让它给人的第一感觉就是--这是个特殊文件,别去管它.不知道大家都是怎么做的.

#12



不管怎么说,也许我是个另类. 可是,我觉得用Java写程序很酷, 把Java程序打包成不管用户有没有装Java都可以运行的EXE文件也很酷,既然Sun给我们提供了一个下载地址就是为了我们好好利用它,那么,为什么不呢? 如果你认为内置JRE更酷,也许我们看法有点不大一样.....就算我喜欢一个美女,我也不怎么感冒她把老爹老娘兄弟姐妹都随时带在身边.

#13


去看看 支持LZ,生命在于鼓捣...

#14


有很多把jar包装成exe的开源项目了,比如jsmooth,Lanuch4j(这个非常好用),最好自带jre(如果对程序体积大小没有限制的话)。

不过lz的精神很可贵

#15


不错!
用过了,拖到图标上就可以生成,很好
很强大!

#16


exe4j很好用啊! 不过我还是会去看看你的程序的!

#17


从网上下载个exe4j_windows_4_0_3.exe
很容易的就可以把jar文件生成exe文件了.

#18


楼主的精神很可嘉!!!值得赞赏!!!!我刚入门不久!!看到楼上高手的发言,觉得是个值得学习的帖子!!希望有跟多的高手进来发表意见!!

#19


楼主,可以交流下么?

#20