今天我们将探讨java的一个常见问题,即如何修复java中的“error:couldnotfind or load main class”错误。顾名思义,当java找不到您要执行的类时,就会发生这个错误。为了更好地理解错误,您应该熟悉类路径CLASSPATH。如果你不熟悉类路径,那么请检查一下什么是类路径以及它与路径的区别。
如果java查找所有类文件的CLASSPATH环境变量未找到类,则会出现“找不到或无法加载主类:XXX”,其中类名为XXX。
1. 从java命令调用.class文件
public class HelloWorld {
public static void main(String args[]) {
System.out.println(" You have just run HelloWorld !");
}
}
假设我有一个简单的HelloWorldJava程序。如果我用命令编译它
javac HelloWorld.java
那么HelloWorld.class类文件已创建。
如果尝试使用java命令运行.class文件,则会出现以下错误:
java HelloWorld.class
你应该试试:
java HelloWorld
耶!!你的问题解决了。
You have just run HelloWorld !
2. 如果你的casing不正确
编译代码后,运行以下命令
java helloworld
然后出现“找不到或加载主类helloworld”错误。确保套管正确。在我们的程序中,它应该是HelloWorld(其中hello的'H'和world的'W'是大写的)。
java HelloWorld
耶!它可以很好的打印出来
You have just run HelloWorld !
3. 在包中初始化
在下面的示例中,有个HelloWorld类在com.javahunger包。
package com.javahungry;
/**
* Java program to demonstrate
* Error :Could not find or load main class
*
* @author Subham Mittal
*/
public class HelloWorld {
public static void main(String args[]) {
System.out.println(" You have just run HelloWorld !");
}
}
如果你试着去调用:
java HelloWorld
它将导致错误:无法找到或加载主类HelloWorld。发生此错误是因为必须使用其完全限定名调用它。很明显,这个类的名称不是HelloWorld,而是com.javahungry.HelloWorld. 尝试执行HelloWorld无效,因为不存在具有该名称的类。反正不在当前类路径上。
java com.javahungry.HelloWorld
上述命令还将导致错误:无法找到或加载主类HelloWorld,因为未设置CLASSPATH环境变量。我不使用-cp命令来指定路径。默认情况下,java在默认目录中搜索类文件。
java -cp . com.javahungry.HelloWorld
如果classpath类路径正确,那么上面的命令将运行HelloWorld程序。否则,还会导致错误:无法找到或加载主类HelloWorld,因为-cp .命令确保JVM在当前目录中查找类文件。
如果错误仍然存在,请执行以下步骤。
必须确保.class文件的位置已添加到类路径中。假设“/Users/SubhamMittal/Desktop/”在类路径classpath上,JVM查找名为com.javahungry.HelloWorld,它将在以下路径中查找.class文件:
“/Users/SubhamMittal/Desktop/com/javahungry/HelloWorld”
java -cp /Users/SubhamMittal/Desktop/ com.javahungry.HelloWorld
耶!它会打印出来
You have just run HelloWorld !
上面的例子是在macos上执行的。
4. 在Windows操作系统的包中初始化
假设编译后的java类即HelloWorld(如上所示)位于下面的路径中
D:\project\com\javahungry\
HelloWorld类的全名是
com.javahungry.HelloWorld
所以用cd .. 返回命令以到达主目录
D:\project
然后发出java命令
java com.javahungry.HelloWorld
耶!程序在没有设置任何类路径的情况下成功运行。这是因为java正在寻找由.(dot)表示的当前目录,并且能够找到.\com\javahunger\HelloWorld.class类.
它会打印出来
You have just run HelloWorld !
5. 将CLASSPATH设置为当前目录
如果.class文件在当前文件夹中,则设置. 到类路径CLASSPATH(注意,在Windows中,类路径分隔符是分号;而在Linux中,分隔符是冒号:)。
您可以在Windows中设置类路径:
set CLASSPATH = %CLASSPATH%;.
(注 . 最后为当前目录添加)
您可以在Linux中设置类路径:
export CLASSPATH = ${CLASSPATH}:.
(注.最后为当前目录添加)
如果您使用的是java 1.5或1.6,则不会出现错误:java.lang.NoClassDefFoundError : HelloWorld。从JDK1.7开始,我们就收到了这个新错误。好消息是,解决方案完全相同。