使用cmd提示符运行java程序时出现“无法找到或加载主类”错误

“Could not find or load main class” Error while running java program using cmd prompt

我正在运行一个简单的"地狱世界"程序。我在命令提示符中得到这个错误:

Could not find or load main class HelloWorld.

我已经在系统中设置了CLASSPATHPATH变量。在cmd提示符中,我从保存HelloWorld程序的目录运行。我可以看到类名和文件名是相同的,并且在同一目录中创建了.class文件。还有什么问题?

我的示例程序如下:

1
2
3
4
5
6
7
package org.tij.exercises;
public class HelloWorld {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Hello World!!");
  }
}


当主类位于包中时,您需要按如下方式运行它:

1
java <packageName>.<MainClassName>

在您的情况下,您应该按如下方式运行程序:

1
java org.tij.exercises.HelloWorld


你的CLASSPATH值多少?

可能是这样的:

1
 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

我想你的价值不包括这个.;

所以,加上它。完成后,重新启动命令

这可能奏效。

例如,文件HelloWorld.java在路径中:D:\myjavatest\org\yz\test,其package为:org.yz.test

现在,您在命令行的路径D:\myjavatest\中。键入此命令进行编译:

1
javac org/yz/test/HelloWorld.java

然后,键入此命令以运行它:

1
java org.yz.test.HelloWorld

你可以得到你想要的。


我把binCLASSPATH上取下来。我发现我正在执行HelloWorld.java所在目录中的java命令,即:

C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>java HelloWorld

所以我移回主目录并执行:

java org.tij.exercises.HelloWorld

它起作用了,即:

C:\Users\xyz\Documents\Java\javastudy\src>java org.tij.exercises.HelloWorld

世界你好!!


因为您是从命令提示符运行它,所以需要确保您的类路径是正确的。如果已经设置了它,则需要重新启动终端以重新加载系统变量。

如果不使用EDCOX1×24和EDCOX1×19 },EDOCX1不被设置为0,则使用当前目录(EDCOX1,15,15),但是当运行EDCOX1,28个文件时,您需要在包含Java包名称文件夹的文件夹中。

因此,在./target/classes/com/foo/app/App.class中有.class文件,您有以下可能:

1
2
3
java -cp target/classes com.foo.app.App
CLASSPATH=target/classes java com.foo.app.App
cd target/classes && java com.foo.app.App

您可以通过打印CLASSPATH变量来检查类路径:

  • Linux:echo $CLASSPATH
  • 窗口:echo %CLASSPATH%

分录以:分隔。

请参见:我如何运行Java.class文件?


我也有同样的问题,我的有点不一样,尽管我没有一个包名。我的问题是类路径,例如:

1
C:\Java Example>java -cp . HelloWorld

Java的EDOCX1 19选项,从我的经验中可以看出(不多),但是我遇到了20次尝试不同方法的错误,直到我声明类路径I接收到相同的错误。维斯朗说的没错。表示当前目录。

如果您需要更多关于Java选项的信息,请输入EDCOX1、20或EDCOX1×21,我认为选项不是可选的。

我刚刚做了更多的研究,我发现了一个详细介绍CLASSPATH的网站。CLASSPATH必须设置为环境变量;到当前目录<.>。您可以从Windows中的命令行进行设置:

1
2
// Set CLASSPATH to the current directory '.'
prompt> set CLASSPATH=.

添加新的环境设置时,需要在启用变量之前重新启动。但是从命令提示可以设置它。它也可以像我在开头提到的那样设置。有关更多信息,如果您使用不同的操作系统,请检查:环境变量。


此错误的一个原因可能是

Could not find or load main class

也许你用你的类名作为不同的名字,用另一个名字保存类名,你可以用类名保存另一个名字的Java源文件名。例如:

1
2
3
4
5
class A{
    public static void main(String args[]) {
        System.out.println("Hello world");
    }
}

你可以存为Hello.java,但是,

编制:javac Hello.java

这将在同一位置自动生成.class文件。

现在运行:java A


在运行Java类时忘记了.class扩展,我得到了完全相同的错误。因此,不要这样:

1
java myClass.class

应该这样做:

1
java myClass

我在Win 10上运行Java时遇到了类似的问题。

而不是

1
2
$ java ./hello
Error: Could not find or load main class ..hello

1
2
$ java hello
Hello, World

使用EDCOX1 OR 14命令执行Java程序。

当您声明了包时,此命令将起作用。

.表示当前目录/。


我用intellij创建了我的.jar,其中包括一些库中未打包的jar。其中一个jar在清单中有一些已签名的内容,阻止加载.jar。没有警告,或其他什么,只是不起作用。Could not find or load main class

移除包含清单的未打包的jar将其修复。


创建一个文件夹org/tij/exercises,然后移动helloworld.java文件。然后在命令下运行

1
javac -cp . org/tij/exercises/HelloWorld.java

1
java -cp . org/tij/exercises/HelloWorld


对我们很多人来说,至少对我来说,我认为类路径层次结构是不直观的,因为我在一个目录结构中工作,感觉应该是这样的。

Java是基于它的包路径来查找类的名称,而不仅仅是文件路径。

如果:我在本地目录中。/packagefoo/mainclass,或者向上的目录/packagefoo/,或一个向下。/PackageFoo/Mainclass/Foo。

命令"JavaPaseFoo.MainClass"正在从根%CassPAT%运行,这意味着对Java有意义。然后,它从那里遍历包名,而不是像我们普通编码人员所期望的那样的路径名。

因此,如果我的类路径设置为%CWD%/,那么"JavaPaseFoo.MainClass"将起作用。如果我将classpath设置为%cwd%/packagefoo/,则找不到packagefoo.mainclass。"java MainClass"总是指"包"中的成员,直到我撕开Java代码"包PACKAGEFO",然后将类文件移动到一个目录。

实际上,如果我将"package packagefoo;"更改为"package foopackage;",我必须在classpath/foopackage或foopackage下创建一个子文件夹。mainClass将停止工作。

更糟糕的是,在path、classpath、javahome、for windows、jdeveloper、oracle数据库和它安装的每个用户名之间,我认为一个试图快速获得某些东西的编码人员最终会强行使用路径变量和结构,直到某个东西在不理解其含义的情况下工作。

至少我做到了。


面临同样的问题。通过以下步骤解决

  • 转到包含"org.tij.exercises"包的目录(例如:在Eclipse中,它可能是您的SRC文件夹)
  • 使用java org.tij.exercises.HelloWorld

我也面临同样的问题,尝试了这里提到的所有方法。问题是在类创建之后,我没有在Eclipse中刷新我的项目。一旦我刷新了它,事情就如预期的那样工作。