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

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


当前回答

在这种情况下,我犯了这样一个错误:

java -cp lib.jar com.mypackage.Main

它与以下各项一起工作:;对于Windows和:对于Unix:

java -cp lib.jar; com.mypackage.Main

其他回答

在Java中,当您有时使用Java解释器可执行文件从命令行运行JVM,并试图从具有公共静态void main(PSVM)的类文件启动程序时,即使JVM的类路径参数是准确的,并且类文件存在于类路径中,也可能会遇到以下错误:

错误:未找到或加载主类

如果无法加载带有PSVM的类文件,就会发生这种情况。一个可能的原因是该类可能正在实现一个接口或扩展不在类路径上的另一个类。通常,如果类不在类路径中,则抛出的错误会指示这一点。但是,如果正在使用的类被扩展或实现,Java将无法加载该类本身。

参考:https://www.computingnotes.net/java/error-main-class-not-found-or-loaded/

当相同的代码在一台电脑上运行,但在另一台电脑中显示错误时,我找到的最佳解决方案是如下编译:

javac HelloWorld.java
java -cp . HelloWorld

在命令行上指定类路径对我有帮助。例如:

创建新文件夹C:\temp在C:\Temp中创建Temp.java文件,其中包含以下类:公共类温度{公共静态void main(字符串参数[]){System.out.println(args[0]);}}打开C:\temp文件夹中的命令行,并编写以下命令以编译temp类:javac Temp.java运行编译后的Java类,添加-classpath选项,让JRE知道在哪里可以找到该类:java-classpath C:\tempTemp您好!

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

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

我有一个奇怪的:

错误:无法找到或加载主类mypackage.App

结果发现,我的项目的POM.xml文件中编码了对POM(父级)的引用(我的项目POM.xml指向父级POM.xml),并且relativePath关闭/错误。

以下是我项目pom.xml文件的一部分:

<parent>
    <groupId>myGroupId</groupId>
    <artifactId>pom-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../badPathHere/pom.xml</relativePath>
</parent>

一旦我解决了POM relativePath,错误就消失了。

想想看吧