Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将java程序编译为可执行文件_Java_Executable_Compilation - Fatal编程技术网

将java程序编译为可执行文件

将java程序编译为可执行文件,java,executable,compilation,Java,Executable,Compilation,可能重复: 我刚刚用Eclipse编写了一个简单的程序,我想将它编译成一个可执行文件,但似乎根本不知道如何执行。您可以做的事情是创建一个.bat来执行创建的.jar文件,检查是否存在JRE 来自Mitch有用链接() 这可以用于您的批处理…有一小部分程序可以这样做。。。TowerJ是我想到的一款(我让你用谷歌搜索一下),但它的成本非常高 我找到的关于这个主题最有用的参考资料是: 它提到了一些其他产品,以及实现相同目的的替代方案。我通常使用bat脚本。以下是我通常使用的: @echo off s

可能重复:


我刚刚用Eclipse编写了一个简单的程序,我想将它编译成一个可执行文件,但似乎根本不知道如何执行。

您可以做的事情是创建一个.bat来执行创建的.jar文件,检查是否存在JRE

来自Mitch有用链接()


这可以用于您的批处理…

有一小部分程序可以这样做。。。TowerJ是我想到的一款(我让你用谷歌搜索一下),但它的成本非常高

我找到的关于这个主题最有用的参考资料是:


它提到了一些其他产品,以及实现相同目的的替代方案。

我通常使用bat脚本。以下是我通常使用的:

@echo off
set d=%~dp0
java -Xmx400m -cp "%d%myapp.jar;%d%libs/mylib.jar" my.main.Class %*
dp0提取.bat所在的目录。这使得bat能够找到JAR的位置,而不需要任何特殊的环境变量,也不需要设置PATH变量

编辑:在类路径中添加引号。否则,正如Joey所说,“使用空格可能会发生有趣的事情”

在您的情况下,我会使用GCJ(GNU编译器for Java)。它是一个面向Java的AOT(提前)编译器,就像GCC面向C一样。它不解释代码,也不生成中间Java代码供Java VM稍后运行,而是生成机器代码

GCJ几乎可以通过其各自的包管理器(如果可用)在任何Linux系统上使用。安装后,应将GCJ编译器添加到路径中,以便通过终端调用它。如果您使用的是Windows,您可以通过Cygwin或MinGW下载并安装GCJ


<>我强烈建议您改写您的源代码,以便编译一种语言,如C++。Java是一种可移植的解释性语言。将其编译为机器代码完全违背了该语言的开发目的。

您可以通过以下方式将.jar文件转换为.exe:

(来源:)

1-JSmooth.exe包装器:
JSmooth是一个Java可执行包装器。它为java应用程序创建本机Windows启动器(standard.exe)。它使java部署更加平滑和用户友好,因为它能够自己找到任何已安装的java VM。当没有可用的VM时,包装器可以自动下载并安装合适的JVM,或者简单地显示消息或将用户重定向到web站点

JSmooth为您的java应用程序提供了多种包装器,每种包装器都有自己的行为:选择您的风格

下载:

2-JarToExe 1.8
Jar2Exe是一种将jar文件转换为exe文件的工具。 以下是其网站中描述的主要功能:

  • 可以生成“控制台”、“Windows GUI”、“Windows服务”三种类型的exe文件
  • 生成的exe文件可以添加程序图标和版本信息
  • 生成的exe文件可以加密和保护java程序,程序运行时不会生成临时文件
  • 生成的exe文件提供系统托盘图标支持
  • 生成的exe文件提供记录系统事件日志支持
  • 生成的windows service exe文件能够自行安装/卸载,并支持服务暂停/继续
  • 新发布的x64版本,可以创建64位的执行器。(2008年5月18日)
  • 支持向导模式和命令行模式。(2008年5月18日)
下载:

3-执行人
将Java应用程序打包为jar,Executor会将jar转换为Windows exe文件,与本机应用程序无法区分。只需双击exe文件即可调用Java运行时环境并启动应用程序

下载:

编辑:上面的链接已断开,但这是来自Internet存档的页面(带有工作下载)

4-高级安装程序
高级安装程序允许您在几分钟内创建Windows MSI安装。它还支持Windows Vista,并有助于以其他语言创建MSI包。
下载: 请告诉我您用于将JAR转换为EXE的其他工具。

我使用

ANT命令:

<target name="jar" depends="compile, buildDLLs, copy">
    <jar basedir="${java.bin.dir}" destfile="${build.dir}/Project.jar" manifest="META-INF/MANIFEST.MF" />
</target>

<target name="exe" depends="jar">
    <exec executable="cmd" dir="${launch4j.home}">
        <arg line="/c launch4jc.exe ${basedir}/${launch4j.dir}/L4J_ProjectConfig.xml" />
    </exec>
</target>

我们发现Jsmooth工作良好,在Linux下可以轻松地使用ant编写脚本。您可能希望首先使用一个jar(在Linux下也可以使用ant轻松编写脚本)在一个jar中收集多文件应用程序

我们主要需要简单部署EXE,并结合“嘿,你需要Java版本X,到这里下载”功能


(但您最可能需要的是标准Java中的“Runnable jar”/“Executable jar”功能)。

使用批处理文件会出现控制台窗口弹出的问题。当你启动一个GUI程序时,这是不好的。名称空间层次结构够深吗?摘自Mitch(post deleted now btw)给出的链接。我不认为这是重点。一个EXE文件可以用C++来创建,就像伊柯丽斯一样。+ 1是一个正确的答案。我不知道GCJ是否支持传统类文件/jvm组合的所有功能,但对于一个“简单程序”来说绝对值得一试。@SjB GCJ确实可以编译成不需要jvm的本机可执行文件。@Mark-它们不需要单独的jvm,但libgcj库实际上是一个jvm。>Java是一个可移植的,解释语言。我真的不认为Java应该被解释。@cubuspl42:事后看来,经过多年的学习,我同意。语言不应该以任何方式执行。这更像是一个实现细节。Python通常会被解释,但将其编译为C不会违反我所知的任何规范。然而,在某些情况下,它确实排除了langua的一些预期设计目标和好处
<target name="jar" depends="compile, buildDLLs, copy">
    <jar basedir="${java.bin.dir}" destfile="${build.dir}/Project.jar" manifest="META-INF/MANIFEST.MF" />
</target>

<target name="exe" depends="jar">
    <exec executable="cmd" dir="${launch4j.home}">
        <arg line="/c launch4jc.exe ${basedir}/${launch4j.dir}/L4J_ProjectConfig.xml" />
    </exec>
</target>