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

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


当前回答

2022年之前的Java新版本为Java18。您只需编写package关键字和文件夹名称,其中包含java扩展文件和分号,如下所示:

包JavaProgramming;

因为我在JavaProgramming文件中有hello.java文件。注意:在为java编写文件夹名时,不要给空格。像Java编程一样,你必须保持它的样子;Java编程等;

简单hello世界的整个代码结构如下所示:

package JavaProgramming;

public class hello {
  public static void main(String[] args) {
     System.out.println("Hello java after long time");
      }
    }

其他回答

在我的例子中,出现错误是因为我提供了源文件名而不是类名。

我们需要向解释器提供包含main方法的类名。

类文件位置:C:\test.com\company

文件名:Main.class

完全限定类名:com.company.Main

命令行命令:

java  -classpath "C:\test" com.company.Main

请注意,类路径不包括.com\company。

场景:使用命令提示符(Windows中的CMD)编译并运行一个简单的“java”程序,该程序只有“Main.java”文件,并指定了“packagemain”。

源文件路径:

某些项目名称文件夹\src\main\main.java

目标文件夹:

某些项目名称文件夹\dest

目标文件路径(文件夹'\main'和文件'\main.class'将由'javac'生成):

某些项目名称文件夹\dest\main\main.class

Main.java如下:

package main;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

编制:

// 'javac' compiler will produce 'Main.class' in the 'dest\main' folder.
// 'main' folder is created because in the source file(in our case: 'Main.java') is
// specified 'package main'.

javac -d ./dest ./src/main/Main.java

运行编译文件(在本例中为“Main.class”):

// '-cp'(is the same as '-classpath')
// './dest'(means destination folder, where resides compiled 'Main.class').
// 'main.Main'(means 'package' 'main', which contains class 'Main'('Main.class'))
// WARNING: when run 'java' class, MUST NOT type extension '.class'
//          after 'class name
//          (in our case: 'main.Main'(<package>.<class-name>) WITHOUT extension 
//           '.class').

java -cp ./dest main.Main

// Hello world

如果是Maven项目:

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

这个问题应该消失。

似乎当我遇到这个问题时,它是独一无二的。

一旦我删除了文件顶部的包声明,它就完美地工作了。

除此之外,似乎没有任何方法在我的机器上运行简单的HelloWorld.java,无论编译发生在哪个文件夹,CLASSPATH或PATH,参数或调用的文件夹。