如何将Java程序转换为.exe文件?
如果我有Java源文件(* .java)或者类文件(* .class),如何将其转换为.exe文件?
我的程序也需要安装程序。
解决方案
恕我直言JSmooth似乎做得很好。
GCJ:适用于Java的GNU编译器可以将Java源代码编译成本机代码,包括Windows可执行文件。
尽管GCJ并不支持Java中的所有功能,尤其是GUI组件(请参见
支持哪些Java API?支持的完整性如何?常见问题解答中的问题)。我没有使用GCJ太多,但是从我对控制台应用程序所做的有限测试来看,它似乎还不错。
使用GCJ创建独立可执行文件的一个缺点是生成的EXE的大小可能会很大。一次,我在GCJ中编译了一个简单的控制台应用程序,结果得到了大约1 MB的可执行文件。 (可能有一些我不知道的解决方法。另一种选择是可执行压缩程序。)
就开源安装程序而言,Nullsoft可脚本安装系统是可脚本安装程序。如果我们好奇,可以找到一些用户贡献的示例,这些示例说明了如何检测JRE的存在并在未安装所需的JRE的情况下自动安装它。 (只是让我们知道,我以前没有使用过NSIS。)
有关使用NSIS安装Java应用程序的更多信息,请查看我对以下问题的回答:"分发Java应用程序的最佳方法是什么?"
一些选项:
可执行的Jar文件
另请参阅将应用程序作为可执行JAR文件分发和有关如何创建可以在Windows上双击执行的jar文件的Oracle文档。
JSmooth
(编辑:上一次发布是在2007年)
JSmooth是一个Java可执行包装器。它为Java应用程序创建本机Windows启动器(标准.exe)。由于它能够自行查找任何已安装的Java VM,因此它使Java部署更加流畅和用户友好。
Jexe包
(编辑:共享软件:最后更新于08/29/2013版本-8.4)
JexePack是一个命令行工具(非常适合自动编写脚本),使我们可以将Java应用程序(类文件)及其资源(如GIF / JPG / TXT / etc)打包到一个压缩的32位Windows EXE中,它使用Sun的Java Runtime Environment运行。控制台和窗口应用程序均受支持。
LaunchAnywhere
(编辑:商业版,免费试用,最新版本为2012年)
LAX可执行文件是一个可执行文件,用于在任何LaunchAnywhere兼容平台上启动Java应用程序。当前,InstallAnywhere在Windows 95/98 / NT / 2000 / Me,Solaris,Linux和Mac OS X上创建LaunchAnywheres。LaunchAnywhere使最终用户可以双击图标(Windows或者Mac OS X)或者键入单个命令。 (UNIX)启动Java应用程序。
另请参见参考将Java转换为EXE:为什么,何时,何时不以及如何
Launch4j
Launch4j是一个跨平台工具,用于将以jar形式分发的Java应用程序包装在轻量级Windows本机可执行文件中。可执行文件可以配置为搜索某个JRE版本或者使用捆绑的版本,并且可以设置运行时选项,例如初始/最大堆大小。如果找不到合适的JRE,则该包装程序还通过应用程序图标,本机JRE之前的初始屏幕,自定义进程名称和Java下载页面提供了更好的用户体验。
我们正在使用Install4J来为Windows或者UNIX环境构建安装程序。
它很容易自定义,直到我们要为标准对话无法完成的特殊动作编写脚本。但是,即使我们使用它来设置Windows服务,我们也只使用标准组件。
- 安装程序+启动器
- Windows或者Unix
- 用Java编写脚本
- 蚂蚁任务
- 许多可定制的标准面板和动作
- (可选)包括或者下载JRE
- 也可以启动Windows服务
- 多种语言
我认为Launch4J来自同一家公司(只是启动器没有安装程序)。
PS:可悲的是,我没有为此获得报酬。我只是喜欢那个工具。
最新的Java Web Start已得到增强,以允许良好的脱机操作以及"本地安装"。值得研究。
如果我们需要将整个应用程序转换为本机代码(即EXE加上DLL),则可以使用ExcelsiorJET。我发现它很好用,并提供了捆绑JRE的替代方法。
或者,我们可以使用一些Java到C的转换器(例如JCGO),并将生成的C文件编译为目标平台的本机二进制(.exe)文件。