新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。

这意味着什么,是什么导致的,你应该如何解决?


当前回答

在IDE开发环境中(Eclipse、NetBeans或其他),您必须将项目财产配置为具有主类,以便IDE知道当您单击“Play”时要执行的主类的位置。

右键单击项目,然后单击财产转到跑步类别并选择您的主类别点击Run(运行)按钮。

其他回答

有时,可能导致问题的原因与主课无关,我必须通过艰难的方式找到答案。这是我移动的参考库,它给了我:

无法找到或加载主类xxx Linux

我只是删除了那个引用,再次添加,它再次运行良好。

这是另一个花费了我一点时间的问题:命令行类路径参数的行为与您预期的不同。我在MacOS上直接调用CLI,并且在调用中包含两个jar。

例如,这两个都让工具混淆了主类的名称:

这是因为星号导致它错误地解析参数:

java-cp路径/to/jars/*com.mypackage.Main

这是因为我不知道为什么:

java-cp“*.jar”com.mypackage.Main

这是有效的:

java-cp“path/to/jars/*”com.mypackage.Main

显式列出两个jar也有效:

java-cp路径/to/jars/jar1.jar:路径/to/jar/jar2.jar com.mypackage.Main

如果是Maven项目:

转到POM文件。删除所有依赖项。保存POM文件。再次只导入必要的依赖项。保存POM文件。

这个问题应该消失。

在IntelliJ IDEA中,检查您的全局库*和本地库检查库版本文件pom.xml,可能是旧库前面的答案中提到了很多可能性,也需要尝试

好吧,已经有很多答案了,但没有人提到文件权限可能是罪魁祸首。

运行时,用户可能无法访问JAR文件或路径的某个目录。例如,考虑:

/dir1/dir2/dir3/myjar.Jar中的Jar文件

拥有JAR文件的用户1可以执行以下操作:

# Running as User1
cd /dir1/dir2/dir3/
chmod +r myjar.jar

但它仍然不起作用:

# Running as User2
java -cp "/dir1/dir2/dir3:/dir1/dir2/javalibs" MyProgram
Error: Could not find or load main class MyProgram

这是因为正在运行的用户(User2)无权访问dir1、dir2或javalibs或dir3。当User1可以看到文件并可以访问这些文件时,这可能会让某人发疯,但User2仍然会发生错误。