1

为这个问题的一般性质道歉。

我已经学习 Java 几个月了,并且创建了一些具有某些功能的简单项目。我想将项目发送给朋友,但我遇到了无数错误和挣扎。当他们试图打开一个 .jar 文件时,会导致“找不到主类”错误。

我尝试使用第三方软件将 .jar 文件打包成 .exe 文件,但同样的错误仍然存​​在。

除此之外,我确信通过第三方软件传递包装成 .exe 文件的 .jar 文件并不是 Java 的预期用途。我读过两本关于 Java 的书,它们都在谈论构建语言,但我对我应该在哪里使用这段代码感到困惑,因为很明显它不打算在文件中传递格式。

这是一种服务器编程语言吗?主要用在网站后端?我不确定在哪里会使用 Java 编写的代码。

4

5 回答 5

4

您应该构建一个可执行的 jar。

检查这里这里

于 2012-12-03T04:55:49.920 回答
2

如果您希望有人能够运行它,您需要将您的 JAR 文件创建为可执行的 JAR 文件。这就是您发送 Java 可执行文件的方式。在这里查看更多信息:

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

于 2012-12-03T04:55:46.373 回答
1

我建议您花一些时间在http://docs.oracle.com/javase/tutorial/上。Java 程序基本上运行在虚拟机之上(而不是直接在你的物理机上)。Java 程序被编译成 *.class 文件,而 *.class 的集合通常被捆绑到 *.jar 文件中。

如果你想运行你的java程序,一种常见的方法是执行java虚拟机运行时(JRE)并指定你的jar包被加载到类路径中,例如:

java -jar /path/to/my.jar

您的 jar 文件必须正确打包,以便指示主类是什么(如果有)

将 jar 打包成 exe 是可能的,但不是最佳实践。Java 范式是一次编写和编译——到处运行。

于 2012-12-03T04:55:23.460 回答
1

来自甲骨文:

如果您将应用程序捆绑在 JAR 文件中,则需要某种方式来指示 JAR 文件中的哪个类是您的应用程序的入口点。您使用清单中的 Main-Class 标头提供此信息,该标头具有一般形式:

Main-Class: classname 值 classname 是作为应用程序入口点的类的名称。

回想一下,入口点是一个具有签名 public static void main(String[] args) 的方法的类。

在清单中设置 Main-Class 标头后,然后使用以下形式的 java 命令运行 JAR 文件:

java -jar JAR-name 执行Main-Class头中指定的类的main方法。

使用 JAR 工具设置入口点:

JDK 6 中引入的“e”标志(用于“入口点”)创建或覆盖清单的 Main-Class 属性。它可以在创建或更新 jar 文件时使用。使用它来指定应用程序入口点,而无需编辑或创建清单文件。例如,此命令创建 app.jar,其中清单中的 Main-Class 属性值设置为 MyApp:

jar cfe app.jar MyApp MyApp.class 您可以通过运行以下命令直接调用此应用程序:

java -jar app.jar 如果入口点类名在包中,它可以使用'.' (点)字符作为分隔符。例如,如果 Main.class 在名为 foo 的包中,则可以通过以下方式指定入口点:

jar cfe Main.jar foo.Main foo/Main.class

设置应用程序的入口点

于 2012-12-03T05:04:24.563 回答
0

为了快速回答,库捆绑在 jar 中,然后添加到另一个应用程序的类路径中。

假设你发明了一种新的排序算法,它比所有其他算法都快。您可以将少量类捆绑到一个 jar 中,它基本上只是一个包含已编译 .class 文件的 zip 文件。

现在您的朋友需要对一些数据进行排序并希望使用您的类。他会编写代码来导入您的类(在他的 .java 文件顶部使用 import),然后在他的代码中使用它们。当他需要将他的 .java 文件编译成 .class 文件时,他会将您的 jar 添加到他的classpath中。Eclipse/netbeans 可以为您设置它,或者如果您从命令行运行 javac,它看起来像这样:

javac ... -cp "fastsorting.jar" ...

有时(很少,在现实世界中)有人有一个 JAR,它实际上是一个完全成熟的程序,旨在运行。我很少说,因为 jar 不是分发软件的最常见方式。更流行的是作为网络服务或通过网站上的小程序。在这种情况下,一个 jar 的清单文件(只是一个告诉 java 关于这个 jar 信息的文本文件)将有一个主类,当通过 .jar 调用 jar 时会运行该主类java

于 2012-12-03T05:01:12.347 回答