繁体   English   中英

使用cmd提示运行Java程序时出现“找不到或加载主类”错误

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

我正在运行一个简单的“ HelloWorld”程序。 我在命令提示符下收到此错误:

无法找到或加载主类HelloWorld

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

我的示例程序如下所示:

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

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

java <packageName>.<MainClassName>

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

java org.tij.exercises.HelloWorld 

您的CLASSPATH值是多少?

它可能看起来像这样:

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

我想您的值不包含此.;

因此, 添加IT
完成后, 重新启动 CMD

那可能行得通。


例如,文件HelloWorld.java位于路径: D:\\myjavatest\\org\\yz\\test而其package是: org.yz.test

现在,您位于CMD行上的路径D:\\myjavatest\\
输入以下内容进行编译:

javac org/yz/test/HelloWorld.java

然后,键入以下内容以运行它:

java org.yz.test.HelloWorld

您可能会得到想要的。

我从CLASSPATH删除了bin 我发现我正在从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

你好,世界!!

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

如果未使用-classpath-cp且未设置CLASSPATH ,则使用当前目录( . ),但是在运行.class文件时,您需要位于包含Java包名称文件夹的文件夹中。

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

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
  • Windows: echo %CLASSPATH%

其具有条目相隔:

另请参阅: 如何运行Java .class文件?

出现此错误的原因之一可能是

找不到或加载主类<class name>

也许您将您的类名用作其他名称,并用另一个名称保存该类名,则可以用一个不同于类名的名称来保存Java源文件名。 例如:

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

您可以另存为Hello.java但是,

编译: javac Hello.java

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

现在运行: java A

我遇到了同样的问题,尽管我没有程序包名称,但我的情况有所不同。 我的问题是类路径,例如:

C:\Java Example>java -cp . HelloWorld 

Java的-cp选项,从我的经验可以知道(虽然不多),但是尝试不同的方法时遇到了大约20次错误,直到我声明Path类为止,我都收到相同的错误。 维什兰特说的是正确的。 代表当前目录。

如果您需要有关java选项的更多信息,请输入java -? java -help我认为选项不是可选的。

我只是做了一些进一步的研究,发现有一个网站详细介绍了CLASSPATH 必须将CLASSPATH设置为环境变量。 到当前目录<。>。 您可以在Windows的命令行中进行设置:

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

添加新的环境设置时,需要先重新启动,然后才能启用变量。 但是,可以在命令提示符下进行设置。 也可以像我一开始提到的那样进行设置。 有关更多信息,并且如果您使用其他操作系统,请检查: 环境变量

使用java -d . HelloWorld执行Java程序java -d . HelloWorld java -d . HelloWorld命令。

声明包后,此命令有效。

. 代表当前目录/。

在win10上运行Java时遇到类似的问题

代替

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

$ java hello
Hello, World

我在运行JAVA类时忘记删除.class扩展名而遇到了完全相同的错误。 所以代替这个:

java myClass.class

一个应该这样做:

java myClass

我遇到了同样的问题,并尝试了此处提到的所有内容。 问题是在创建类之后,我没有刷新我的项目。 一旦刷新,一切就会按预期进行。

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

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

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

Java正在根据其包路径而不是文件路径来查看类的名称。

没关系,是否:我在本地目录./packagefoo/MainClass中,或在./packagefoo/上的目录中,或在./packagefoo/MainClass/foo中的下一个目录中。

命令“ java packagefoo.MainClass”从根目录%CLASSPATH%运行,这对Java来说意义重大。 然后从那里遍历包名,而不是像我们非编码人员所期望的路径名。

因此,如果我的CLASSPATH设置为%CWD%/,则“ java packagefoo.MainClass”将起作用。 如果将CLASSPATH设置为%CWD%/ packagefoo /,则找不到packagefoo.MainClass。 如果它是“ package”的成员,则始终是“ java MainClass”没有任何意义,直到我退出Java代码“ package packagefoo;”为止。 并将类文件上移目录。

实际上,如果我更改“ package packagefoo;”, 到“打包foopackage;” 我必须在CLASSPATH / foopackage或foopackage下创建一个子文件夹.MainClass再次停止工作。

更糟糕的是,在Windows的PATH,CLASSPATH,JAVAHOME,JDeveloper,Oracle数据库及其下安装的每个用户名之间,我认为一个试图快速获取内容的编码人员最终会强行强制使用路径变量和结构,直到出现某种情况在不了解其含义的情况下工作。

至少我做到了。

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

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

java -cp . org/tij/exercises/HelloWorld

我使用IntelliJ创建了我的.jar,其中包括我库中一些未包装的jar。 这些罐子之一在清单中有一些签名的东西,阻止了.jar的加载。 没有警告或其他任何东西,只是行不通。 Could not find or load main class

取出装有清单的拆开的罐子将其固定。

我遇到了类似的问题,但这是由于文件目录中的空格字符导致我保留了Java类。

下面给出了方案以及解决方案:

   public class Sample{
      public static void main(String[] args) {
        System.out.println("Hello world, Java");
      }
}
  • 我的Sample.java类保存在目录“ D:\\ Java Programs \\ Sample.java”中[注意:java类中没有Package语句]。
  • 在命令提示符下,将目录更改为“ D:\\ Java Programs \\”,我的程序已编译,但是由于错误“找不到或加载主类”而无法运行
  • 在SOF上所有可能的解决方案都解决了之后(我什么都没做),我意识到可能是空格导致了我这个问题。
  • 令人惊讶的是,删除了文件夹名称空间char ['Java Programs'->'JavaPrograms'],我的程序成功执行了。

    希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM