新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。

其他回答

如果是Maven项目:

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

这个问题应该消失。

我遇到了同样的问题,最终发现了我的错误:)我使用此命令进行编译,并且运行正常:

javac -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode.java

但这个命令对我不起作用(我找不到或加载主类qrcode):

java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode

最后,我只在类路径末尾添加了“:”字符,问题就解决了:

java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar:" qrcode

默认情况下,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。

在测试JavaMongoDB JDBC连接时,我也遇到了类似的错误。我认为简单总结一下我的最终解决方案是很好的,这样将来任何人都可以直接研究这两个命令,并可以继续进行下去。

假设您位于Java文件和外部依赖项(JAR文件)所在的目录中。

编译:

javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java

-cp-类路径参数;逐个传递所有从属JAR文件*.java-这是具有main方法的java类文件。标准差分法

Run:

java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection

请在所有依赖JAR文件结束后观察冒号(Unix)/逗号(Windows)最后,观察没有任何扩展名的主类名(没有.class或.java)

我在做mvn eclipse后遇到了这个错误:eclipse。这有点搞乱了我的.classpath文件。

我不得不将.classpath中的行从

<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>

to

<classpathentry kind="src" path="src/main/java" output="target/classes" />
<classpathentry kind="src" path="src/main/resources" excluding="**"  output="target/classes" />