如何创建可执行的Java程序?

67
我已经在JCreator中编写了一个Java程序,一切都完成了,但我希望能够从中创建一个可执行文件,即我不想通过加载Java类并编译然后执行来运行程序,而是将其作为独立的可执行文件运行。
最快的方法是什么?

4
在Stack Overflow上有很多关于这个问题的帖子。https://dev59.com/aXVD5IYBdhLWcg3wHn2d - Michael B.
11个回答

75

您可以使用SDK附带的jar工具创建程序的可执行版本。

以下是操作步骤:

我会在这里展示从命令提示符中获得的结果,因为这样更方便,但是使用JCreator时应该也适用。

首先创建您的程序:

$cat HelloWorldSwing.java
    package start;

    import javax.swing.*;

    public class HelloWorldSwing {
        public static void main(String[] args) {
            //Create and set up the window.
            JFrame frame = new JFrame("HelloWorldSwing");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            JLabel label = new JLabel("Hello World");
            frame.add(label);

            //Display the window.
            frame.pack();
            frame.setVisible(true);
        }
    }
    class Dummy {
        // just to have another thing to pack in the jar
    }

非常简单,只需显示一个带有“Hello World”的窗口

然后编译它:

$javac -d . HelloWorldSwing.java

在“start”文件夹中创建了两个文件Dummy.classHelloWorldSwing.class

$ls start/
Dummy.class     HelloWorldSwing.class

接下来,创建JAR文件。每个JAR文件都有一个清单文件,其中包含与可执行文件相关的属性。

这是我的清单文件的内容。

$cat manifest.mf
Main-class: start.HelloWorldSwing

简要描述一下主类是什么(具有public static void main方法的类)

准备好清单文件后,就会调用jar可执行文件。

它有很多选项,这里我使用-c -m -f(-c表示创建jar,-m表示指定清单文件,-f表示文件应该命名为...),以及我想要打包成jar的文件夹。

$jar -cmf manifest.mf hello.jar start

这将在系统上创建.jar文件。

输入图像描述

稍后只需双击该文件,它将按预期运行。

输入图像描述

要在JCreator中创建 .jar 文件,您只需要使用“工具”菜单、创建 jar 文件,但我不确定清单如何去。

这里有一个关于此的视频:在 Jcreator 中创建 Jar 文件

一旦您熟悉了这个“.jar”方法,我认为您可以继续阅读本主题中发布的其他链接。

您也可以使用jnlp(Java Network Launcher Protocol)


@IlmariKaronen 已更新! - OscarRyz
6
一个jar文件并不是一个真正的独立可执行文件。如果你双击一个jar文件并且程序运行了,那么它是在Java可执行文件中打开这个jar文件。 - barlop

21

如果您正在使用Eclipse,您可以尝试以下7个步骤来获得Windows系统的.exe文件。

step1step2step3

现在您拥有一个JAR文件。使用java -jar path/jarname.jar来执行。

enter image description here


如果您想将此转换为.exe文件,可以尝试使用http://sourceforge.net/projects/launch4j/files/launch4j-3/

STEP5STEP6

步骤7: 为.xml文件取一个合适的名字,然后点击“保存”。.xml文件是标准的,不用担心。您的可执行文件现在将被创建!


Linux和MacOS如何处理可执行文件?在任何操作系统上双击JAR文件是否有效? - android developer
只要操作系统存在Java环境,它就能够正常工作。 - Reporter

12

我不太确定您的意思。

但我猜您可能是指以下两种情况之一。

  • 您想创建一个可执行的 .jar 文件

Eclipse可以很容易地完成这个操作:选择文件-->导出,创建一个jar文件,然后选择适当的Main-Class,它就会为您生成.jar文件。在Windows系统中,您可能需要将.jar文件与Java运行时关联起来。即,按住Shift键,右键单击“打开方式”,浏览到您的JVM并将其与javaw.exe关联。

  • 如果您要创建实际的 .exe 文件,则需要使用额外的库,如

http://jsmooth.sourceforge.net/http://launch4j.sourceforge.net/,将创建具有漂亮图标的本机 .exe 框架,从而启动您的应用程序。它们甚至会确定客户端是否安装了JVM,并提示您获取JVM。


5
在命令行中,导航到您希望使其可执行的Java文件的根目录。
使用以下命令:
jar -cvf [name of jar file] [name of directory with Java files]

这将在jar存档中创建一个名为META-INF的目录。在这个META-INF目录中有一个名为MANIFEST.MF的文件,用文本编辑器打开此文件并添加以下行:

Main-Class: [fully qualified name of your main class]

然后使用这个命令:

java -jar [name of jar file]

你的程序将会运行 :)


3

3
请看WinRun4J。它只适用于Windows,因为Unix有可执行脚本,看起来像是二进制文件(对用户而言)。您还可以轻松地修改WinRun4J以在Unix上编译。
它确实需要一个配置文件,但再次重新编译它并使用硬编码选项,就像无需配置的exe一样工作。

3

Jexecutable可以为Java程序创建Windows可执行文件。它将jar文件嵌入exe文件中,您可以像运行Windows程序一样运行它。


2
你可以使用GCJ将Java程序编译成本地代码。
他们甚至曾经将Eclipse编译成了本地版本

1

编写一个脚本并使其可执行。该脚本应该看起来像您通常在命令行中使用的样子:

java YourClass

假设您已经编译了您的 .java 文件,并且 Java 能够找到您的 .class 文件。如果 Java 找不到您的 .class 文件,您可能需要考虑使用 -classpath 选项或设置 CLASSPATH 环境变量。


1

Java Web Start是一项很好的技术,可将Java丰富客户端直接安装到最终用户的桌面上(无论操作系统是Windows、Mac还是*nix)。它具有桌面集成和自动更新等许多好处。

有关JWS的更多信息,请参见JWS信息页面


1
FYI,Java Web Start和JNLP在Java 9中已被弃用并计划移除。请参阅Oracle的此废止列表,其中提到JDK-8184998(不公开):*Java部署技术已被弃用,并将在将来的版本中删除包括Applet API、Java插件、Java Applet Viewer、JNLP和Java Web Start,包括javaws工具在内的Java Applet和WebStart功能,在JDK 9中都已被弃用,并将在将来的版本中删除。 - Basil Bourque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接