我发现Windows中的很多Java程序都使用.bat批处理文件作为程序启动器。如果与使用.exe可执行文件的其他程序相比,它看起来很奇怪。
为什么那些Java程序不能使用.exe文件?这是Java程序的限制吗?
感谢。
答案 0 :(得分:12)
创建一个.bat文件并在其中包含java -jar <archive-path>
并让它运行起来非常简单。您可以轻松编辑.bat文件并进行更多配置。你需要的只是记事本。
它看起来非常像Linux的bash脚本文件。这使得用于执行.jar中的程序的.bat文件很容易从Win转移到Linux。
虽然.exe文件不容易修改(如果有的话)并且它产生一些元数据,但生成的.exe更大... EXE也是Windows特定的文件扩展名...
当然,如果您想将所有内容打包在一个文件中并让用户不必担心删除.jar文件但仍然有蝙蝠...那是另一种情况。
答案 1 :(得分:9)
批处理文件经常执行“java -jar”并另外添加JVM参数 - 这不能添加到jar文件中。
编写bat文件比将java档案包装到exe文件更快 - 这些工具通常是商业的或不能正常工作......
此外,在java中完成的本机Windows可执行文件(.exe)并不多(但是,它仍然可以 - vuze,limewire等。)
答案 2 :(得分:4)
Java无法编译为.exe
。它编译为虚拟机JVM。这是Java平台技术的基本方面。
.bat
本质上是Windows的shell脚本。它会执行.exe
,例如来自JRE的java.exe
然后运行字节码编译的Java代码。
答案 3 :(得分:2)
实际上,很多Java应用程序做使用本机启动程序而不是批处理脚本:Eclipse,NetBeans,IntelliJ IDEA,JRuby而Vuze只是其中的一小部分。
人们不更频繁地执行此操作的主要原因是,在C中嵌入JVM实际上有点棘手,如果您可以从批处理脚本中启动它,那么为什么烦?
答案 4 :(得分:0)
批处理文件可以使用必要的类路径等加载JVM,并告诉它在jar中运行jar或类或类。生成可执行的PE映像只是为了发出一个或两个命令来启动JVM并告诉它打开一个jar,这是一种过度的工作和更多的工作。
答案 5 :(得分:0)
嗯......如果你想执行 .class 文件,你必须使用批处理文件。您想使用批处理,因为您必须将java程序URI传递给java虚拟机(也是程序),以便它可以执行它。
但是你可以将java程序构建为可执行的,与 EXE 相同(只需要双击它来执行它)。其扩展名为 .JAR ,有时您需要将 .JAR 扩展名与Java平台二进制文件(或类似版本)相关联才能实现此目的。然后由Windows将你的java应用程序的URI传递给java虚拟机,以便它被执行。
要在NetBeans中执行此操作,请执行Build命令,并在项目文件夹中找到dist文件夹,然后您将看到java可执行文件。
从用户的角度来看,exe或者没有exe,功能是相同的,因此它不会计量......注意
Java程序与平台无关,因此在不同平台上执行的过程可能会有所不同。如果Java只适用于Windows,我确信SUN会将其编译为Windows EXE。
答案 6 :(得分:0)
欢迎来到DOS shell脚本的世界。你可以创建一个jar文件可执行文件,但如果你只有java类文件,那么你可以做的最好就是输入一个小脚本来运行你的java程序。
答案 7 :(得分:0)
Java程序是从头开始设计的,不是由操作系统运行,而是由虚拟机运行。当你“运行一个java程序”时,你实际上是在启动一个虚拟机并告诉它加载你的程序。
这就是它的设计方式。这并不是说他们在质量部门懈怠(一个答案表明Sun只能将产品完成80%),这是一个有意识的决定。而且因为创建一个批处理文件,快捷方式,shell脚本或可执行文件来提供一键式启动器非常简单,所以没有必要添加将java程序转换为单击.exe的功能(在窗户的情况。)
答案 8 :(得分:0)
我的两个原因是:
java -jar whatever.jar
的程序菜单快捷方式,除非您以某种方式将安装程序配置为接受java
作为目标计算机上存在的程序。这可能很难或不可能,而创建分发中包含的BAT文件的快捷方式是轻而易举的。答案 9 :(得分:-1)
好问题。我也想知道为什么Sun从未提供过生成.exe的工具。
exe文件比bat文件更加用户友好。它有一个漂亮的图标etcetara。
我曾经自己写过一些东西:http://www.bitstorm.org/jarx/
答案 10 :(得分:-1)
您可以使用多平台安装创作工具为您创建一个。例如,InstallAnywhere,它将为您的java应用程序创建一个Windows可执行文件。
Sun是一家遵循80/20规则的公司,他们让最重要的事情发挥作用,但从未让它运作良好。例如,比较用于浏览器检测的Java插件并安装到adobe flash。很多年前Flash很快就很容易,而java插件经常会把你带到sun网站,就是这样。
回到可执行文件,java模型写入一次,运行很多,当Sun决定提供一个启动器时,他们将不得不为所有平台提供它。例如,Windows JDK需要为windows x86,ia64,amd64,linux / unix提供启动器,因为它们都使用共享shell脚本,因此可以共享启动器。那么问题是,太阳是否显示出mac的包装?它只是不适合,你应该看看像installanywhere和install4j这样的工具,它们都包括java发射器。
答案 11 :(得分:-3)
您可以使用autoit快速创建一个带有自定义图标的exe,这个图标看起来比仅仅.bat文件更专业。