找不到或者加载main类
如果我们在Java编程中有很多经验或者作为新手Java开发人员,我们可能会遇到此错误:找不到或者加载主类(Could not find or load main class)。
在我们理解此错误之前,让我们首先了解如何运行Java命令语法。
java <classpath> [ <option> ... ] class-name [<argument> ...]
其中
- Java是执行Java程序的命令。
- ClassPath表示-classpath或者-cp选项以在类路径上放置任何文件夹或者jar。
- 选项表示具有" - "的命令行选项,例如-dxmx1024m,以指定最大堆空间为1024 MB。
- class-name表示要执行的类的名称
- Agrages表示要传递给Program.it的命令行参数。它将传递给公共静态void main(args [])
将类名指定给程序时,我们需要提供完整的分类类名。
例如:
package org.theitroad; public class FirstProgramInJava { public static void main(String args[]) { System.out.println("Hello world from same java program"); } }
如果要执行上面的类,让我们假设C的C:\Workspace \ javaproject \ target \ classes文件夹中生成类文件。
我们需要指定命令如下所示。
C:\workspace \ javaproject \ target \ classes> java -xmx1024m org.theitroad.firstprograminjava
请注意,-XMX1024M在此处是可选的。
以下是运行Java命令时发生的步骤。
- 搜索编译版的类
- 加载类
- 检查该类是否有正确的主要方法签名
- 调用参数的方法。
让我们了解无法找到或者加载主类的原因。
本质上,这些问题可能有两类。
- 找不到主类
- 无法加载主类
找不到类main
最有可能的原因是我们可能提供了错误的文件名。
让我们了解这个错误的原因。
1.没有完全限定的类名的类名
如前所述,我们需要提供完全分类的类名来运行java命令。
例如:
你试图按照下面运行程序。
C:\workspace \ javaproject \ target \ classes> java firstprograminjava
而不是应该被称为
C:\workspace \ javaproject \ target \ classes> java org.theitroad.firstprograminjava
2.你把.class放在后缀。
这也可能是可能的原因。
例如:
C:\workspace \ javaproject \ target \ classes> java org.theitroad.firstprograminjava.class
删除.class扩展以解决问题
你把.java放在后缀。
我们已直接配置源文件名以执行命令。
例如:
C:\workspace \ javaproject \ target \ classes> java org.theitroad.firstprograminjava.java
删除.java扩展以解决问题
4.案例不正确
它可能是由于案例不正确。
仔细观察类名。
C:\workspace \ javaproject \ target \ classes> java org.theitroad.firstprograminjava
5.一个错字
再次检查程序的拼写!它可能是非常不可能的,但可以在类名中有拼写错误。
C:\workspace \ javaproject \ target \ classes> java org.theitroad.firstprogramjava
无法加载主类
1.由于子目录路径而无法找到类。
让我们说你有FirstPrograminjava类。
你编译了这个程序。
现在你想运行org.theitroad.firstprograminjava .class文件是在c:\workspace \ javaproject \ target \ classes \ org \ onitad \ firstproggraminjava.class当前工作目录是c:\workspace \ javaproject \ target \ classes \ org \ onitoad.
然后让我们了解运行以下命令时会发生什么。
#在这里需要完全限定名称C:\workspace \ javaproject \ target \ classes \ org \ onitorad> java firstprograminjava#无法运行,因为当前工作目录中没有org \ onitread没有目录。
:\workspace \ javaproject \ target \ classes \ org \ onitad> java org.theitroad.firstprograminjava
它将在当前目录中查找Org/OniToro/FirstPrograminjava.Class,但它将无法找到我们已在Org \ OnItoad目录中。
我们需要使用-classpath或者-cp来运行来自当前工作目录的FirstProgramInjava类。
#this应该正常工作,因为我们把相对的类路径放在这里c:\workspace \ javaproject \ target \ classes \ org \ onirad> java -cp ../.. org.theitroad.firstprograminjava#这应该正常工作正常ClassPath这里c:\workspace \ javaproject \ target \ classes \ org \ theitroad> java -cp c:\workspace \ javaproject \ target \ classes org.theitroad.firstprograminjava
2.我们已将错误的目录放在ClassPath上
每当我们放置类路径上的任何目录时,在该目录的基础上都会搜索类。
例如:我们已在ClassPath中放置C:\Workspace \ javaproject \ target \ classes,我们可以在下面运行以下命令
C:\workspace> java -cp c:\workspace \ javaproject \ target \ classes org.theitroad.firstprograminjava
然后它将在C:\workspace \ javaproject \ target \ classes \ org \ onitad \ firstproggraminjava.class中查找.class文件。
将正常工作,但假设我们在下面运行命令。
C:\workspace> java -cp c:\workspace \ javaproject \ target \ classes \ org \ onitad org.theitroad.firstprograminjava
它将无法找到程序,因为它会在c:\workspace \ javaproject \ target \ classes \ org \ onitad \ org \ onitread \ firstproggraminjava.class中
3.我们错过了类路径的依赖项
类路径应包括我们应用程序取决于的所有库。
如果JVM需要加载该类
- JVM应该能够在超类层次结构中找到类和接口。
- 它还应该能够找到由变量,方法或者任何其他访问表达式引用的所有类和接口。