运行 Eclipse 导出的 jar 时出现“找不到主类”错误

Posted

技术标签:

【中文标题】运行 Eclipse 导出的 jar 时出现“找不到主类”错误【英文标题】:"Could not find the main class" error when running jar exported by Eclipse 【发布时间】:2012-03-25 15:44:50 【问题描述】:

我有一个在 Eclipse 中运行时运行良好的 java 项目。当我尝试将其导出到 "JAR file""Runnable JAR file" 时,会创建 .jar 文件,但是当我双击它以尝试运行程序时,它给了我一个错误提示

"Could not find the main class: package.MainClassName. Program will exit."

正如我所提到的,我尝试导出到两个 JAR 选项,我指定了 main 方法所在的正确类,当我查看 .jar 文件中的实际文件时,一切似乎都井井有条——清单看起来像:

Manifest-Version: 1.0
Main-Class: package.MainClassName
(blank line)

并且位于META-INF 文件夹中。有一个以我的包名命名的文件夹,其中包含所有 .class 文件,包括包含 main 方法的类。我使用的一些图像和文本文件也出现在 jar 文件中。

实际的程序并不太复杂——它是一个使用 Swing 的简单“蛇”游戏(加上从 Eclipse 内部运行时所有代码都可以工作)。

任何想法是什么导致了这个错误以及我该如何解决它?让我知道我是否应该提供任何其他信息。

【问题讨论】:

主类的全名是什么?是package.MainClassName 还是别的什么? Manifesto 是检查清单的便捷方式。 @trashgod Manifesto 究竟做了什么而仅仅看清单却没有? @scae:只是方便;它会显示 JAR 中实际出现的清单,而无需提取内容。 "Could not find the main class" when double-clicking .jar file的可能重复 【参考方案1】:

验证您是否可以这样启动您的应用程序:

java -cp myjarfile.jar snake.Controller

当我双击它时,我刚刚阅读 - 这听起来像是您的操作系统的配置问题。您是在 Windows 资源管理器窗口中双击文件吗?尝试使用命令从控制台/终端运行它

java -jar myjarfile.jar

进一步阅读

Running JAR file on Windows

清单必须以新行结束。请检查您的文件,缺少新行会导致麻烦。

【讨论】:

对不起,我忘了在上面提到它,但清单是由 Eclipse 创建的,并且在末尾包含一个空行(有时它包含 2 个)。【参考方案2】:

好的,所以我终于让它工作了。如果我使用 JRE 6 而不是 7,一切都会很好。不知道为什么,但它确实有效。

【讨论】:

啊哈,存在版本冲突,您的 Eclipse 使用的是更高版本,然后是类路径上的版本。大部分时间都会发生这种情况。 除了在 eclipse 中使用旧版本之外还有什么方法可以修复它? 而是在环境变量中的 Eclipse 和路径变量上选择相同的版本。 在 Eclipse 中,转到项目的运行配置并选择“主类”(浏览并选择)。在此之后生成 jar 文件。这应该可以解决任何问题。【参考方案3】:

在命令行上这样运行:

java -jar /path/to/your/jar/jarFile.jar

【讨论】:

有人能解释一下这个答案有什么问题吗?我不明白。当我收到“找不到主类错误”时,这正是我用来运行 jar 文件的方法 这对我有用,忘记了“jar”前面的“-”【参考方案4】:

您是否尝试过手动创建 .jar 文件而不是使用 Eclipse。请尝试以下步骤,希望对您有所帮助:

考虑到您的目录结构如下所示:

 TicTacToe(Your Project Name I mean)
 |              |                  |
src            bin             manifest.txt
             |    |
           icons  tictactoe

现在假设我的主类是 BeginGame 包内 tictactoe,所以我将在我的 manifest.txt 文件中写这个东西:

Main-Class: tictactoe.BeginGame

请记住冒号 : 和包名之间的空格,即 tictactoe,紧跟在 BeginGame 之后按 Enter 并保存文件。

现在在你的命令提示符下转到 bin 文件夹的位置,我将我的描述如下:

C:\Mine\Eclipse\TicTacToe\bin>jar -cfm ..\tictactoe.jar ..\manifest.txt tictactoe icons
这里的第一个参数,即..\tictactoe.jar 用于告诉在上一级创建tictactoe.jar,即在TicTacToe Folder 内部。 第二个参数..\manifest.txt 表示 manifest.txt 文件位于上一层,即在TicTacToe Folder 内部。 第三和第四个参数tictactoeicons 表示将这两个文件夹添加到.jar 文件中,因为它们被放置在bin 文件夹中,因此它们可以按原样使用。现在按 Enter。

现在尝试运行在Project Folder(在我的例子中是井字游戏文件夹)中创建的.jar 文件。

希望这会奏效。

【讨论】:

【参考方案5】:

您是否重命名了您的项目/主类(例如通过重构)?如果是,您的 Launch Configuration 可能设置不正确(例如,引用 old 主类或配置)。即使项目名称出现在“export runnable jar”对话框中,仔细检查也可能会发现主类名称不匹配。

转到项目的“属性->运行/调试设置”并确保您的启动配置(用于导出可运行 jar 的相同)设置为项目的正确名称您的主类设置为name.space.of.your.project/YouMainClass

【讨论】:

【参考方案6】:

前几天我遇到了同样的问题,我花了好几天才让它工作。 错误信息是“找不到主类”,但我可以在其他 Windows 机器上运行从 Eclipse 导出的可执行 jar,没有任何问题。

解决方案是安装相同版本的 JRE 的 x64 和 x86 版本。路径环境变量指向 x64 版本。不知道为什么,但它对我有用。

【讨论】:

【参考方案7】:

右键单击项目。转到属性。单击运行/调试设置。现在删除您尝试运行的主类的运行配置。 现在,当你再次点击运行时,一切都会好起来的。

【讨论】:

【参考方案8】:

对于 netbeans 用户来说,遇到这个问题很简单:

1.转到您的项目并右键单击并选择属性

2.点击运行,同时点击浏览器。

3.选择你想首先出现的框架。

【讨论】:

以上是关于运行 Eclipse 导出的 jar 时出现“找不到主类”错误的主要内容,如果未能解决你的问题,请参考以下文章

当我在 Eclipse 中运行 hadoop 作业时出现异常

我用eclipse导出的runnable jar不能双击执行,但在命令行可以用java -jar ***.jar运行,这是怎么回事?

尝试运行 Eclipse 产品时出现异常

Win7下在Visual Studio 2008里运行程序时出现找不到MFC90D.dll文件, Command Prompt找不指定路径

Eclipse导出jar,无法运行,在线高分急等。

为啥eclipse导出来的jar包没显示在左侧