用Java编写的程序如何不需要JRE?

用Java编写的程序如何不需要JRE?,java,executable,portability,Java,Executable,Portability,我进行了一次新的安装,在安装之前,Java能够运行NetBeans和OpenOffice。如果这些程序是用Java编写的,这怎么可能呢?我知道存在一些.class到.exe的转换器,但我认为这些都是黑客攻击(不适合在全球部署的大型应用程序)。在没有JRE的情况下,用Java部署应用程序的常用方法是什么?是否有一个标准,或最常见的方法 起初我认为它与Jar文件有关,但根据我所了解的情况,这些文件需要现有的Java安装才能运行 所有Java应用程序都在JRE上运行。甚至是NetBeans和OpenO

我进行了一次新的安装,在安装之前,Java能够运行NetBeans和OpenOffice。如果这些程序是用Java编写的,这怎么可能呢?我知道存在一些
.class
.exe
的转换器,但我认为这些都是黑客攻击(不适合在全球部署的大型应用程序)。在没有JRE的情况下,用Java部署应用程序的常用方法是什么?是否有一个标准,或最常见的方法


起初我认为它与Jar文件有关,但根据我所了解的情况,这些文件需要现有的Java安装才能运行

所有Java应用程序都在JRE上运行。甚至是NetBeans和OpenOffice


大多数可部署Java应用程序都附带了JRE。因此,您可能会看到它没有JRE,但实际上有一个JRE,应用程序将在其上运行。

运行程序的方法只有两种:将其编译成机器代码或使用解释器

JRE解释Java字节码(当然还有更多的事情)。有些编译器可以从Java源代码或字节代码生成本机可执行文件。我知道的唯一一个是gcj,上一次我检查它时,它只适用于Java5,似乎不太可靠

大多数java应用程序要么需要JRE,要么在发行版中包含JRE

例如,您可以获得包含或不包含JRE的Oracle SQL Developer。关于Netbeans,有些发行版需要JDK(一个JRE是不够的,因为它需要编译器和开发工具),还有带有Netbeans捆绑包的JDK

现在,启动Java应用程序有三种主要方法(不包括JavaWebStart等):手动运行Java命令、使用脚本或运行名为“wrapper”的可执行文件

有几种包装,你可以为任何应用定制。PJ Fanning的链接包括一个列表(如果没有弄错的话)。包装器使用JRE来运行应用程序,并在系统启动时轻松地将java应用程序作为服务启动


因此,除非您找到一个编译成本机代码的应用程序(理想情况下,您无法判断它是Java应用程序),否则您总是在使用一些JRE,无论是预安装的JRE,或者一个捆绑的。

重复一个AIK OpenOffice是用c++编写的,如果Netbeans运行,您已经安装了Java。OpenOffice不是用Java编写的。@wiki上没有名字的马至少部分是这样。不管怎样,我相信还有很多其他的例子。好吧,那么你本质上是说一个应用程序可以自带它自己的JRE?因为当应用程序运行时,计算机上肯定没有(安装)一个。是的,例如带有JDK/JRE的Netbeans,你可以遵循这个@Celeritas,看看launch4j和其他类似的东西,它可以捆绑JAR和JRE,使它们成为一个.exe(至少对于windows)例如