5

我最近开发了一些我希望其他人在他们的机器上运行的 java 应用程序。我做了一些研究,现在知道要分发 java 代码,您需要创建 .jar 文件。好吧,我做到了,但是当我分发这些文件时,它在某些计算机上运行,​​但在其他计算机上返回错误消息:“找不到主类”。

  1. JRE版本有问题吗?
  2. 用户如何知道他/她应该在哪个版本上运行应用程序。
  3. 我可以用我的 app/jar 文件打包正确的 jre 版本吗?如何??
  4. jar 文件是否与其他版本的 jre 不兼容,除非它们在其中编译。
4

3 回答 3

2

选项1:创建一个清单文件,其条目如下并包含在jar中:

     Main-Class: MainProgram

选项2:只需Main在运行程序时提及您的类名,例如,如果您的jar名字是myprogram.jar并且主类是MainProgram然后运行程序如下:

        java -cp myprogram.jar MainProgram

如果您MainProgram接受一些参数,它们也会在命令行中传递它们,例如

       java -cp myprogram.jar MainProgram argument1 argument2
于 2012-11-08T21:00:56.583 回答
0

一些 SDK(如 Eclipse)具有创建 jar 文件的功能。如果您使用控制台,这可能会帮助您创建稳定的 jar 文件:

'jar cfm className.jar MANIFEST.MF className.class'

于 2012-11-08T21:12:23.230 回答
0
  1. 这应该无关紧要,除了第 4 点。
  2. 您必须告诉他们所需的最低版本。
  3. 你可以,但是你可能必须创建一个安装程序,这比 jar 更复杂。
  4. In general yes, if your user has a VM at least the version you compiled with. The class files that you package inside the jar are targeted to some version of the JRE and their format changes every now and then. Higher versions of the JRE support lower version class files.

The error message indicates that the JRE can't find your main class. From the comments it looks like you did not specify the manifest correctly. Is it contained inside a META-INF directory inside the jar? What does jar -tf my_jar.jar tell you?

If you're worried about JRE versions, try specifying a lower target version in your javac command. You do this by adding -target xx to your javac invocation and possibly also -source xx. Have a look at javac -help for a description of the flags.

于 2012-11-08T21:13:47.703 回答