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

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


当前回答

默认情况下,Java使用。,当前工作目录,作为默认CLASSPATH。这意味着,当您在提示符处键入命令(例如javaMyClass)时,该命令将被解释为您键入了java-cp。我的班级。你看到-cp和MyClass之间的点了吗?(cp是较长类路径选项的缩写)

这在大多数情况下都是足够的,在您尝试向CLASSPATH添加目录之前,一切似乎都很正常。在大多数情况下,当程序员需要这样做时,他们只需运行一个命令,比如set CLASSPATH=path \to\some\dir。此命令创建一个名为CLASSPATH的新环境变量,该变量的值为path\to\some\dir,或者如果以前已设置CLASSPATH,则将其值替换为path \to\sme\dir。

完成后,您现在有了一个CLASSPATH环境变量,Java不再使用默认的类路径(.),而是使用您设置的类路径。所以第二天你打开编辑器,写一些java程序,cd到你保存它的目录,编译它,并尝试用命令javaMyClass运行它,你会得到一个很好的输出:找不到或加载主类。。。(如果您的命令以前工作得很好,现在得到了这个输出,那么您可能就是这样)。

发生的情况是,当您运行命令javaMyClass时,java会在CLASSPATH中设置的一个或多个目录中搜索名为MyClass的类文件,而不是当前工作目录,因此在那里找不到您的类文件并因此发出抱怨。

你需要做的是添加。这可以通过命令集CLASSPATH=%CLASSPATH%;来完成;。(注意分号后的点)。在纯英语中,此命令表示“选择CLASSPATH(%CLASSPATH%)的初始值,将.添加到(;.),并将结果分配回CLASSPATH”。

瞧,您再次能够像往常一样使用命令javaMyClass。

其他回答

我上升了一级。因此,现在HelloWorld.class文件位于hello\HelloWorld.cclass中,我运行了以下命令。其中cp是类路径和。表示仅签入当前目录。

java -cp . hello.HelloWorld

输出

Hello world!

修复它的最简单方法是在这里重新下载Maven Apache:https://maven.apache.org/download.cgi

然后再次设置路径:

系统变量

将您设置Apache Maven文件夹的路径设置为:C:\Program Files\Apache-Maven-3.8.4\bin

重新启动终端或IDE,它应该可以工作。

它总是对我有用。

根据错误消息(“找不到或加载主类”),有两类问题:

找不到Main类无法加载Main类(在接受的答案中未充分讨论此情况)

当完全限定类名中存在拼写错误或语法错误,或者提供的类路径中不存在Main类时,找不到Main类。

当无法启动类时,无法加载Main类。通常,主类扩展另一个类,而该类不存在于提供的类路径中。

例如:

public class YourMain extends org.apache.camel.spring.Main

如果不包括骆驼弹簧,将报告此错误。

在本例中,您有:

无法找到或加载主类?类路径

这是因为您使用的是“-classpath”,但破折号与java在命令提示符上使用的破折号不同。我遇到了从记事本复制和粘贴到cmd的问题。

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

运行时,用户可能无法访问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仍然会发生错误。