找不到或者加载main类

时间:2020-02-23 14:34:01  来源:igfitidea点击:

如果我们在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应该能够在超类层次结构中找到类和接口。
  • 它还应该能够找到由变量,方法或者任何其他访问表达式引用的所有类和接口。